Exemplo n.º 1
0
        public static PokemonSpecies PokemonSpecies(string name)
        {
            int e;
            var r = Find(name, out e);

            return(r != null && r[0] == 'p' ? RomData.GetPokemon(int.Parse(r.Substring(1)) / 100) : null);
        }
Exemplo n.º 2
0
        public static MoveType Move(string name)
        {
            int e;
            var r = Find(name, out e);

            return(r != null && r[0] == 'm' ? RomData.GetMove(int.Parse(r.Substring(1))) : null);
        }
Exemplo n.º 3
0
 public void ChangeMove(int from, int to)
 {
     for (int i = 0; i < 4; ++i)
     {
         if (Moves[i] != null && Moves[i].Type.Id == from)
         {
             Moves[i] = new SimMove(RomData.GetMove(to));
             break;
         }
     }
 }
Exemplo n.º 4
0
        internal static PokemonForm PokemonForm(string name)
        {
            int e;
            var r = Find(name, out e);

            if (r == null || r[0] != 'p')
            {
                return(null);
            }
            var n = int.Parse(r.Substring(1));

            return(RomData.GetPokemon(n / 100, n % 100));
        }
Exemplo n.º 5
0
        internal void ChangeMoves(int[] moves)
        {
            int i = -1;

            while (++i < moves.Length)
            {
                Moves[i] = new SimMove(RomData.GetMove(moves[i]));
            }
            while (i < 4)
            {
                Moves[i++] = null;
            }
        }
Exemplo n.º 6
0
        private static PokemonData ReadData(BinaryReader reader)
        {
            PokemonData pm       = null;
            int         identity = reader.ReadInt32();

            if (identity > 0 && identity < 504)
            {
                pm      = GetById(identity);
                pm.Name = reader.ReadString();
                pm.Lv   = reader.ReadByte();

                pm.Ev.Atk   = reader.ReadByte();
                pm.Ev.Def   = reader.ReadByte();
                pm.Ev.Speed = reader.ReadByte();
                pm.Ev.SpAtk = reader.ReadByte();
                pm.Ev.SpDef = reader.ReadByte();
                pm.Ev.Hp    = reader.ReadByte();

                pm.Iv.Atk   = reader.ReadByte();
                pm.Iv.Def   = reader.ReadByte();
                pm.Iv.Speed = reader.ReadByte();
                pm.Iv.SpAtk = reader.ReadByte();
                pm.Iv.SpDef = reader.ReadByte();
                pm.Iv.Hp    = reader.ReadByte();

                pm.Gender = (PokemonGender)reader.ReadInt32();
                int abilityId = GetAbilityId(identity, reader.ReadByte());

                pm.Ability = abilityId;
                pm.Nature  = (PokemonNature)reader.ReadInt32();
                pm.Item    = GetItemId(reader.ReadInt32());

                for (int i = 0; i < 4; i++)
                {
                    int moveId = GetMoveId(reader.ReadString());
                    if (moveId > 0)
                    {
                        MoveType move = RomData.GetMove(moveId);
                        if (move != null)
                        {
                            pm.AddMove(move);
                        }
                    }
                }
            }
            return(pm);
        }
Exemplo n.º 7
0
 /// <summary>
 /// 不判断PP数及技能是否存在
 /// </summary>
 /// <param name="move"></param>
 /// <returns></returns>
 public bool Move(SimMove move)
 {
     if (OnlyMove != 0 && OnlyMove != move.Type.Id)
     {
         SetErrorMessage(Only, GameString.Current.Move(RomData.GetMove(OnlyMove).Id), GameString.Current.Item(Pm.Pokemon.Item));
     }
     else
     if (Block != null)
     {
         for (int i = 0; i < Pm.Moves.Length; ++i)
         {
             if (move == Pm.Moves[i])
             {
                 if (Block[i] != null)
                 {
                     SetErrorMessage(Block[i], GameString.Current.Move(move.Type.Id), null);
                 }
                 break;
             }
         }
     }
     return(error == null);
 }
Exemplo n.º 8
0
        private static PokemonData ToPokemonData(Pokemon pm)
        {
            var data = new PokemonData(pm.Num, pm.Forme);

            data.Name      = pm.Nickname;
            data.Ability   = pm.Ability;
            data.Item      = Item2PBO(pm.Item);
            data.Gender    = (PokemonGender)pm.Gender;
            data.Nature    = (PokemonNature)pm.Nature;
            data.Lv        = pm.Lvl;
            data.Happiness = pm.Hapiness;

            for (int i = 0; i < 4 && i < pm.Move.Length; i++)
            {
                if (pm.Move[i] > 0)
                {
                    MoveType move = RomData.GetMove(pm.Move[i]);
                    if (move != null)
                    {
                        data.AddMove(move);
                    }
                }
            }

            for (int i = 0; i < 6 && i < pm.DV.Length; i++)
            {
                data.Iv.SetStat(PO_STATS[i], pm.DV[i]);
            }

            for (int i = 0; i < 6 && i < pm.EV.Length; i++)
            {
                data.Ev.SetStat(PO_STATS[i], pm.EV[i]);
            }

            return(data);
        }
 public PokemonData(int number, int form)
 {
     _moves = new ObservableCollection <LearnedMove>();
     _ev    = new Observable6D();
     Form   = RomData.GetPokemon(number, form);
 }
Exemplo n.º 10
0
        public PokemonData(int seed, string suiji)  //随机生成pm
        {
            _moves = new ObservableCollection <LearnedMove>();
            _ev    = new Observable6D();

            Random random = new Random(seed);
            bool   item_  = true;

            number = random.Next(1, 803);
            Form   = RomData.GetPokemon(number, form);

            int ff;

            ff = random.Next(RomData.Pokemons.ElementAtOrDefault(number - 1).Forms.Count());
            if (MegaPokemon.Contains(number) && (ff > 0))
            {
                item_ = SuitMegaStone(ff);
                ff    = 0;
            }
            if (number == 670 && ff <= 4)
            {
                ff = 0;
            }
            if (number == 025 || number == 351 || number == 384 || number == 421 || number == 493 || number == 555 || number == 647 || number == 648 || number == 649 || number == 658 || number == 666 || number == 669 || number == 671 || number == 676 || number == 678 || number == 681 || number == 710 || number == 711 || number == 718 && form == 4 || number == 773 || number == 774 || number == 778)
            {
                ff = 0;
            }
            if (number == 382 && form == 1)
            {
                _item = 9044;
                item_ = false;
            }
            if (number == 383 && form == 1)
            {
                _item = 9045;
                item_ = false;
            }
            if (number == 487 && ff == 1)
            {
                _item = 1003;
                item_ = false;
            }
            if (number == 718 && ff == 4)
            {
                ff = 2;
            }
            Form = RomData.GetPokemon(number, ff);

            Random genderrandom = new Random(random.Next());

            Gender = Form.Species.Genders.ElementAtOrDefault(genderrandom.Next(0, Form.Species.Genders.Count()));

            Nature = (PokemonNature)random.Next(0, 25);

            //for (int i = 0; i != 0; i = Form.Data.Abilities[random.Next(0, Form.Data.Abilities.Count())])
            //Ability = i;
            _abilityIndex = (Byte)random.Next(0, Form.Data.Abilities.Count());

            _Iv = new Observable6D(random.Next(0, 32), random.Next(0, 32), random.Next(0, 32), random.Next(0, 32), random.Next(0, 32), random.Next(0, 32));

            int[] ev    = new int[] { 0, 0, 0, 0, 0, 0 };
            int   index = 0;

            for (int i = 0; i < 127; i++)
            {
                while (true)
                {
                    index = random.Next(0, 6);
                    if (ev[index] <= 251)
                    {
                        ev[index] += 4;
                        break;
                    }
                }
            }
            _ev = new Observable6D(ev[0], ev[1], ev[2], ev[3], ev[4], ev[5]);

            GetLearnset();
            while (moveIds.Count() < 4 && moveIds.Count() < learnset.Count())
            {
                int x = learnset[random.Next(0, learnset.Count())];
                if (x != -1)
                {
                    AddMove(RomData.GetMove(x));
                }
            }
            if (number == 647 && HasMove(Ms.SECRET_SWORD))
            {
                Form = RomData.GetPokemon(number, 1);
            }

            Happiness = random.Next(0, 256);

            if (item_)
            {
ItemLoop:
                Item = RomData.Items.ElementAtOrDefault(random.Next(0, RomData.Items.Count()));
                if (UselessItem.Contains(Item) || (9000 <= Item && Item < 10004) || (11000 <= Item && Item < 12000 && number != 773) || (1300 <= Item && Item < 1400 && number != 649))
                {
                    goto ItemLoop;
                }
            }
        }