Example #1
0
        /// <summary>
        /// Returns the name's character values as array.
        /// </summary>
        /// <param name="Name">Trainer name.</param>
        /// <param name="Korean">Use Korean character encoding.</param>
        /// <returns></returns>
        private static byte[] GetBytes(string Name, bool Korean)
        {
            byte[] chars = new byte[Korean ? Name.Length * 2 : Name.Length];

            if (Korean)
            {
                for (int x = 0; x < Name.Length; x++)
                {
                    if (Table_KO.TryGetValue(Name[x].ToString(), out ushort b))
                    {
                        chars[x * 2]     = (byte)(b >> 8);
                        chars[x * 2 + 1] = (byte)(b & 0xFF);
                    }
                }
            }
            else
            {
                for (int x = 0; x < Name.Length; x++)
                {
                    if (Table.TryGetValue(Name[x].ToString(), out byte b))
                    {
                        chars[x] = b;
                    }
                }
            }

            return(chars);
        }
Example #2
0
        /// <summary>
        /// Calculates and returns the password to reset the clock.
        /// </summary>
        /// <param name="Name">Trainer name.</param>
        /// <param name="TID">Trainer ID.</param>
        /// <param name="Money">Amount of money the player is currently carrying.</param>
        /// <param name="Korean">Use Korean character encoding.</param>
        /// <returns></returns>
        public static ushort GetPassword(string Name, int TID, int Money, bool Korean = false)
        {
            if (Korean)
            {
                foreach (char c in Name)
                {
                    if (!Table_KO.ContainsKey(c.ToString()))
                    {
                        throw new ArgumentOutOfRangeException("Name", c.ToString(), "Unexpected character.");
                    }
                }
            }
            else
            {
                foreach (char c in Name)
                {
                    if (!Table.ContainsKey(c.ToString()))
                    {
                        throw new ArgumentOutOfRangeException("Name", c.ToString(), "Unexpected character.");
                    }
                }
            }

            if (TID < 0 || TID > 65535)
            {
                throw new ArgumentOutOfRangeException("TID", TID, "Expected a value between 0 and 65535.");
            }

            if (Money < 0 || Money > 999999)
            {
                throw new ArgumentOutOfRangeException("Money", Money, "Expected a value between 0 and 999999.");
            }
            ;


            ushort pass = 0;

            byte[] nameBytes = GetBytes(Name, Korean);

            for (int x = 0; x < nameBytes.Length && x < 5; x++) // only the first 5 characters are taken into account
            {
                pass += nameBytes[x];
            }

            pass += (ushort)((TID >> 8) + (TID & 0xFF) + ((Money >> 16) & 0xFF) + ((Money >> 8) & 0xFF) + (Money & 0xFF));

            return(pass);
        }