示例#1
0
        public void SaveReplay(string path)
        {
            if (BattleState != PBEBattleState.Ended)
            {
                throw new InvalidOperationException($"{nameof(BattleState)} must be {PBEBattleState.Ended} to save a replay.");
            }

            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(CurrentReplayVersion));
            bytes.Add((byte)BattleFormat);

            bytes.AddRange(PBEUtils.StringToBytes(Teams[0].TrainerName));
            bytes.Add((byte)Teams[0].Party.Count);
            bytes.AddRange(Teams[0].Party.SelectMany(p => p.Shell.ToBytes()));

            bytes.AddRange(PBEUtils.StringToBytes(Teams[1].TrainerName));
            bytes.Add((byte)Teams[1].Party.Count);
            bytes.AddRange(Teams[1].Party.SelectMany(p => p.Shell.ToBytes()));

            foreach (INetPacket packet in Events)
            {
                bytes.AddRange(packet.Buffer);
            }

            using (var md5 = MD5.Create())
            {
                bytes.AddRange(md5.ComputeHash(bytes.ToArray()));
            }

            File.WriteAllBytes(path, bytes.ToArray());
        }
 internal void ToBytes(List <byte> bytes)
 {
     PBEUtils.StringToBytes(bytes, TrainerName);
     bytes.Add((byte)Party.Count);
     for (int i = 0; i < (sbyte)Party.Count; i++)
     {
         Party[i].ToBytes(bytes);
     }
 }
        public PBEPlayerJoinedPacket(bool isMe, int battleId, string trainerName)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)((IsMe = isMe) ? 1 : 0));
            bytes.AddRange(BitConverter.GetBytes(BattleId     = battleId));
            bytes.AddRange(PBEUtils.StringToBytes(TrainerName = trainerName));
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
示例#4
0
        public PBEIllusionPacket(PBEPokemon pokemon)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(Pokemon = pokemon.FieldPosition));
            bytes.Add((PokemonTeam = pokemon.Team).Id);
            bytes.Add((byte)(ActualGender = pokemon.Shell.Gender));
            bytes.AddRange(PBEUtils.StringToBytes(ActualNickname = pokemon.Shell.Nickname));
            bytes.Add((byte)((ActualShiny = pokemon.Shell.Shiny) ? 1 : 0));
            bytes.AddRange(BitConverter.GetBytes((ushort)(ActualSpecies = pokemon.Shell.Species)));
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
示例#5
0
 internal void ToBytes(List <byte> bytes)
 {
     bytes.Add(PokemonId);
     bytes.Add(DisguisedAsId);
     bytes.AddRange(BitConverter.GetBytes((uint)Species));
     PBEUtils.StringToBytes(bytes, Nickname);
     bytes.Add(Level);
     bytes.Add((byte)(Shiny ? 1 : 0));
     bytes.Add((byte)Gender);
     bytes.AddRange(BitConverter.GetBytes(HP));
     bytes.AddRange(BitConverter.GetBytes(MaxHP));
     bytes.AddRange(BitConverter.GetBytes(HPPercentage));
     bytes.Add((byte)Status1);
     bytes.Add((byte)FieldPosition);
 }
 internal void ToBytes(List <byte> bytes)
 {
     bytes.Add(Id);
     bytes.AddRange(BitConverter.GetBytes((uint)OriginalSpecies));
     PBEUtils.StringToBytes(bytes, Nickname);
     bytes.Add(Level);
     bytes.Add(Friendship);
     bytes.Add((byte)(Shiny ? 1 : 0));
     bytes.Add((byte)OriginalAbility);
     bytes.Add((byte)Nature);
     bytes.Add((byte)Gender);
     bytes.AddRange(BitConverter.GetBytes((ushort)OriginalItem));
     EffortValues.ToBytes(bytes);
     IndividualValues.ToBytes(bytes);
     OriginalMoveset.ToBytes(bytes);
 }
        internal PBEIllusionPacket(PBEPokemon pokemon)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(Pokemon = pokemon.FieldPosition));
            bytes.Add((PokemonTeam = pokemon.Team).Id);
            bytes.Add((byte)(ActualGender = pokemon.Gender));
            PBEUtils.StringToBytes(bytes, ActualNickname = pokemon.Nickname);
            bytes.Add((byte)((ActualShiny = pokemon.Shiny) ? 1 : 0));
            bytes.AddRange(BitConverter.GetBytes((ushort)(ActualSpecies = pokemon.Species)));
            bytes.Add((byte)(ActualType1 = pokemon.Type1));
            bytes.Add((byte)(ActualType2 = pokemon.Type2));
            bytes.AddRange(BitConverter.GetBytes(ActualWeight = pokemon.Weight));
            bytes.InsertRange(0, BitConverter.GetBytes((short)bytes.Count));
            Buffer = new ReadOnlyCollection <byte>(bytes);
        }
            internal byte[] ToBytes()
            {
                var bytes = new List <byte>();

                bytes.Add(PokemonId);
                bytes.Add(DisguisedAsId);
                bytes.AddRange(BitConverter.GetBytes((uint)Species));
                bytes.AddRange(PBEUtils.StringToBytes(Nickname));
                bytes.Add(Level);
                bytes.Add((byte)(Shiny ? 1 : 0));
                bytes.Add((byte)Gender);
                bytes.AddRange(BitConverter.GetBytes(HP));
                bytes.AddRange(BitConverter.GetBytes(MaxHP));
                bytes.AddRange(BitConverter.GetBytes(HPPercentage));
                bytes.Add((byte)Status1);
                bytes.Add((byte)FieldPosition);
                return(bytes.ToArray());
            }
示例#9
0
        public PBEPlayerJoinedPacket(bool isMe, int battleId, string trainerName)
        {
            if (trainerName == null)
            {
                throw new ArgumentNullException(nameof(trainerName));
            }
            if (string.IsNullOrWhiteSpace(trainerName))
            {
                throw new ArgumentOutOfRangeException(nameof(trainerName));
            }
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)((IsMe = isMe) ? 1 : 0));
            bytes.AddRange(BitConverter.GetBytes(BattleId = battleId));
            PBEUtils.StringToBytes(bytes, TrainerName     = trainerName);
            bytes.InsertRange(0, BitConverter.GetBytes((short)bytes.Count));
            Buffer = new ReadOnlyCollection <byte>(bytes);
        }
示例#10
0
        internal byte[] ToBytes()
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes((uint)Species));
            bytes.AddRange(PBEUtils.StringToBytes(Nickname));
            bytes.Add(Level);
            bytes.Add(Friendship);
            bytes.Add((byte)(Shiny ? 1 : 0));
            bytes.Add((byte)Ability);
            bytes.Add((byte)Nature);
            bytes.Add((byte)Gender);
            bytes.AddRange(BitConverter.GetBytes((ushort)Item));
            bytes.AddRange(EVs);
            bytes.AddRange(IVs);
            bytes.Add((byte)Moves.Length);
            for (int i = 0; i < Moves.Length; i++)
            {
                bytes.AddRange(BitConverter.GetBytes((ushort)Moves[i]));
            }
            bytes.AddRange(PPUps);
            return(bytes.ToArray());
        }