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); }
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); }
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()); }
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); }
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()); }