Beispiel #1
0
        public MoveInfo(int i, PBEPokemon pkmn, Action <MoveInfo> clickAction)
        {
            bool enabled;

            if (pkmn.IsForcedToStruggle())
            {
                Move    = PBEMove.Struggle;
                enabled = true;
            }
            else if (pkmn.TempLockedMove != PBEMove.None)
            {
                Move    = pkmn.TempLockedMove;
                enabled = true;
            }
            else if (pkmn.ChoiceLockedMove != PBEMove.None)
            {
                Move    = pkmn.ChoiceLockedMove;
                enabled = true;
            }
            else
            {
                Move    = pkmn.Moves[i];
                enabled = Move != PBEMove.None && pkmn.PP[i] > 0;
            }
            Tuple <SolidColorBrush, SolidColorBrush> ttb = Move == PBEMove.None ? typeToBrush[PBEType.Normal] : typeToBrush[pkmn.GetMoveType(Move)];

            Brush       = ttb.Item1;
            BorderBrush = ttb.Item2;
            Description = Move == PBEMove.None ? string.Empty : PBEMoveData.Data[Move].ToString();

            var sub = new Subject <bool>();

            SelectMoveCommand = ReactiveCommand.Create(() => clickAction(this), sub);
            sub.OnNext(enabled);
        }
Beispiel #2
0
        public MoveInfo(int i, PBEPokemon pkmn, Action <MoveInfo> clickAction)
        {
            bool enabled;

            if (pkmn.IsForcedToStruggle())
            {
                Move    = PBEMove.Struggle;
                enabled = true;
            }
            else if (pkmn.TempLockedMove != PBEMove.None)
            {
                Move    = pkmn.TempLockedMove;
                enabled = true;
            }
            else if (pkmn.ChoiceLockedMove != PBEMove.None)
            {
                Move    = pkmn.ChoiceLockedMove;
                enabled = true;
            }
            else
            {
                Move    = pkmn.Moves[i];
                enabled = Move != PBEMove.None && pkmn.PP[i] > 0;
            }
            Tuple <Color, Color> ttc = Move == PBEMove.None ? typeToColor[PBEType.Normal] : typeToColor[pkmn.GetMoveType(Move)];

            Color       = ttc.Item1;
            BorderColor = ttc.Item2;

            SelectMoveCommand = new Command(() => clickAction(this), () => enabled);
        }
Beispiel #3
0
 internal PBETransformPacket(PBEPokemon user, PBEPokemon target)
 {
     using (var ms = new MemoryStream())
         using (var w = new EndianBinaryWriter(ms, encoding: EncodingType.UTF16))
         {
             w.Write(Code);
             w.Write(User = user.FieldPosition);
             w.Write((UserTeam = user.Team).Id);
             w.Write(Target = target.FieldPosition);
             w.Write((TargetTeam = target.Team).Id);
             w.Write(TargetAttack          = target.Attack);
             w.Write(TargetDefense         = target.Defense);
             w.Write(TargetSpAttack        = target.SpAttack);
             w.Write(TargetSpDefense       = target.SpDefense);
             w.Write(TargetSpeed           = target.Speed);
             w.Write(TargetAttackChange    = target.AttackChange);
             w.Write(TargetDefenseChange   = target.DefenseChange);
             w.Write(TargetSpAttackChange  = target.SpAttackChange);
             w.Write(TargetSpDefenseChange = target.SpDefenseChange);
             w.Write(TargetSpeedChange     = target.SpeedChange);
             w.Write(TargetAccuracyChange  = target.AccuracyChange);
             w.Write(TargetEvasionChange   = target.EvasionChange);
             w.Write(TargetAbility         = target.Ability);
             w.Write(TargetSpecies         = target.Species);
             w.Write(TargetType1           = target.Type1);
             w.Write(TargetType2           = target.Type2);
             w.Write(TargetWeight          = target.Weight);
             TargetMoves = target.Moves.ForTransformPacket();
             for (int i = 0; i < TargetMoves.Count; i++)
             {
                 w.Write(TargetMoves[i]);
             }
             Data = new ReadOnlyCollection <byte>(ms.ToArray());
         }
 }
        internal PBETransformPacket(PBEPokemon user, PBEPokemon target)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(User = user.FieldPosition));
            bytes.Add((UserTeam = user.Team).Id);
            bytes.Add((byte)(Target = target.FieldPosition));
            bytes.Add((TargetTeam = target.Team).Id);
            bytes.AddRange(BitConverter.GetBytes(TargetAttack    = target.Attack));
            bytes.AddRange(BitConverter.GetBytes(TargetDefense   = target.Defense));
            bytes.AddRange(BitConverter.GetBytes(TargetSpAttack  = target.SpAttack));
            bytes.AddRange(BitConverter.GetBytes(TargetSpDefense = target.SpDefense));
            bytes.AddRange(BitConverter.GetBytes(TargetSpeed     = target.Speed));
            bytes.Add((byte)(TargetAttackChange = target.AttackChange));
            bytes.Add((byte)(TargetDefenseChange = target.DefenseChange));
            bytes.Add((byte)(TargetSpAttackChange = target.SpAttackChange));
            bytes.Add((byte)(TargetSpDefenseChange = target.SpDefenseChange));
            bytes.Add((byte)(TargetSpeedChange = target.SpeedChange));
            bytes.Add((byte)(TargetAccuracyChange = target.AccuracyChange));
            bytes.Add((byte)(TargetEvasionChange = target.EvasionChange));
            bytes.Add((byte)(TargetAbility = target.Ability));
            bytes.AddRange(BitConverter.GetBytes((ushort)(TargetSpecies = target.Species)));
            bytes.Add((byte)(TargetType1 = target.Type1));
            bytes.Add((byte)(TargetType2 = target.Type2));
            bytes.AddRange(BitConverter.GetBytes(TargetWeight = target.Weight));
            TargetMoves = target.Moves.ForTransformPacket();
            for (int i = 0; i < (byte)TargetMoves.Count; i++)
            {
                bytes.AddRange(BitConverter.GetBytes((ushort)TargetMoves[i]));
            }
            bytes.InsertRange(0, BitConverter.GetBytes((short)bytes.Count));
            Buffer = new ReadOnlyCollection <byte>(bytes);
        }
Beispiel #5
0
        public PBETransformPacket(PBEPokemon user, PBEPokemon target)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(User = user.FieldPosition));
            bytes.Add((UserTeam = user.Team).Id);
            bytes.Add((byte)(Target = target.FieldPosition));
            bytes.Add((TargetTeam = target.Team).Id);
            bytes.AddRange(BitConverter.GetBytes(TargetAttack    = target.Attack));
            bytes.AddRange(BitConverter.GetBytes(TargetDefense   = target.Defense));
            bytes.AddRange(BitConverter.GetBytes(TargetSpAttack  = target.SpAttack));
            bytes.AddRange(BitConverter.GetBytes(TargetSpDefense = target.SpDefense));
            bytes.AddRange(BitConverter.GetBytes(TargetSpeed     = target.Speed));
            bytes.Add((byte)(TargetAttackChange = target.AttackChange));
            bytes.Add((byte)(TargetDefenseChange = target.DefenseChange));
            bytes.Add((byte)(TargetSpAttackChange = target.SpAttackChange));
            bytes.Add((byte)(TargetSpDefenseChange = target.SpDefenseChange));
            bytes.Add((byte)(TargetSpeedChange = target.SpeedChange));
            bytes.Add((byte)(TargetAccuracyChange = target.AccuracyChange));
            bytes.Add((byte)(TargetEvasionChange = target.EvasionChange));
            bytes.Add((byte)(TargetAbility = target.Ability));
            bytes.Add((byte)(TargetType1 = target.Type1));
            bytes.Add((byte)(TargetType2 = target.Type2));
            bytes.AddRange(BitConverter.GetBytes(TargetWeight = target.Weight));
            bytes.Add((byte)(TargetMoves = Array.AsReadOnly(target.Moves)).Count);
            for (int i = 0; i < TargetMoves.Count; i++)
            {
                bytes.AddRange(BitConverter.GetBytes((ushort)TargetMoves[i]));
            }
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
        public void Update(PBEPokemon pkmn)
        {
            if (pkmn == null || pkmn.FieldPosition == PBEFieldPosition.None)
            {
                IsVisible = false;
            }
            else
            {
                //Level = $"{(pkmn.Shell.Gender == PBEGender.Genderless ? " " : pkmn.GenderSymbol)}[LV]{pkmn.Shell.Level}";
                //HP = pkmn.HP;
                Status1.Source = pkmn.Status1 == PBEStatus1.None ? null : ImageSource.FromResource($"Kermalis.PokemonBattleEngineMobile.MISC.STATUS1_{pkmn.Status1}.png");

                if (pkmn.HPPercentage <= 0.20)
                {
                    HP.Color = red;
                }
                else if (pkmn.HPPercentage <= 0.50)
                {
                    HP.Color = yellow;
                }
                else
                {
                    HP.Color = green;
                }
                const byte lineW = 48, lineH = 3;
                Canvas.SetSize(HP, new Size(pkmn.HPPercentage * lineW, lineH));

                IsVisible = true;
            }
        }
Beispiel #7
0
        public PokemonInfo(PBEPokemon pkmn, bool locked, Action <PokemonInfo> clickAction)
        {
            Pokemon = pkmn;

            bool enabled = !locked && pkmn.FieldPosition == PBEFieldPosition.None && pkmn.HP > 0;

            SelectPokemonCommand = new Command(() => clickAction(this), () => enabled);
        }
Beispiel #8
0
        internal PBEMoveCritPacket(PBEPokemon victim)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(Victim = victim.FieldPosition));
            bytes.Add((VictimTeam = victim.Team).Id);
            bytes.InsertRange(0, BitConverter.GetBytes((short)bytes.Count));
            Buffer = new ReadOnlyCollection <byte>(bytes);
        }
Beispiel #9
0
        public PBEMoveEffectivenessPacket(PBEPokemon victim, PBEEffectiveness effectiveness)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(Victim = victim.FieldPosition));
            bytes.Add((VictimTeam = victim.Team).Id);
            bytes.Add((byte)(Effectiveness = effectiveness));
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
        public PBEMoveMissedPacket(PBEPokemon moveUser, PBEPokemon pokemon2)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(MoveUser = moveUser.FieldPosition));
            bytes.Add((MoveUserTeam = moveUser.Team).Id);
            bytes.Add((byte)(Pokemon2 = pokemon2.FieldPosition));
            bytes.Add((Pokemon2Team = pokemon2.Team).Id);
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
Beispiel #11
0
        public PokemonInfo(PBEPokemon pkmn, bool locked, Action <PokemonInfo> clickAction)
        {
            Pokemon = pkmn;

            bool enabled = !locked && pkmn.FieldPosition == PBEFieldPosition.None && pkmn.HP > 0;

            var sub = new Subject <bool>();

            SelectPokemonCommand = ReactiveCommand.Create(() => clickAction(this), sub);
            sub.OnNext(enabled);
        }
Beispiel #12
0
        }                                        // null means no victim

        public PBEWeatherPacket(PBEWeather weather, PBEWeatherAction weatherAction, PBEPokemon damageVictim)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(Weather = weather));
            bytes.Add((byte)(WeatherAction = weatherAction));
            bytes.Add((byte)(DamageVictim = damageVictim == null ? PBEFieldPosition.None : damageVictim.FieldPosition));
            bytes.Add((DamageVictimTeam = damageVictim?.Team) == null ? byte.MaxValue : damageVictim.Team.Id);
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
        public PBEMoveUsedPacket(PBEPokemon moveUser, PBEMove move)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(MoveUser = moveUser.FieldPosition));
            bytes.Add((MoveUserTeam = moveUser.Team).Id);
            bytes.AddRange(BitConverter.GetBytes((ushort)(Move = move)));
            bytes.Add((byte)((OwnsMove = moveUser.Moves.Contains(Move)) ? 1 : 0));
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
 internal PBEMoveCritPacket(PBEPokemon victim)
 {
     using (var ms = new MemoryStream())
         using (var w = new EndianBinaryWriter(ms, encoding: EncodingType.UTF16))
         {
             w.Write(Code);
             w.Write(Victim = victim.FieldPosition);
             w.Write((VictimTeam = victim.Team).Id);
             Data = new ReadOnlyCollection <byte>(ms.ToArray());
         }
 }
Beispiel #15
0
        /// <summary>
        /// Creates valid actions for a battle turn for a specific team.
        /// </summary>
        /// <param name="team">The team to create actions for.</param>
        /// <exception cref="InvalidOperationException">Thrown when <paramref name="team"/> has no active battlers or <paramref name="team"/>'s <see cref="PBETeam.Battle"/>'s <see cref="PBEBattle.BattleState"/> is not <see cref="PBEBattleState.WaitingForActions"/>.</exception>
        /// <exception cref="ArgumentOutOfRangeException">Thrown when a Pokémon has no moves, the AI tries to use a move with invalid targets, or <paramref name="team"/>'s <see cref="PBETeam.Battle"/>'s <see cref="PBEBattle.BattleFormat"/> is invalid.</exception>
        public static IEnumerable <PBEAction> CreateActions(PBETeam team)
        {
            if (team.Battle.BattleState != PBEBattleState.WaitingForActions)
            {
                throw new InvalidOperationException($"{nameof(team.Battle.BattleState)} must be {PBEBattleState.WaitingForActions} to create actions.");
            }
            PBEPokemon[] active = team.ActiveBattlers.ToArray();
            if (active.Length == 0)
            {
                throw new InvalidOperationException($"{nameof(team)} must have active battlers.");
            }
            var actions = new PBEAction[active.Length];

            for (int i = 0; i < active.Length; i++)
            {
                PBEPokemon pkmn = active[i];
                if (pkmn.Moves.All(m => m == PBEMove.None))
                {
                    throw new ArgumentOutOfRangeException(nameof(pkmn.Moves), $"{pkmn.Shell.Nickname} has no moves.");
                }
                actions[i].PokemonId = pkmn.Id;
                actions[i].Decision  = PBEDecision.Fight;
                if (pkmn.IsForcedToStruggle())
                {
                    actions[i].FightMove = PBEMove.Struggle;
                }
                else if (pkmn.TempLockedMove != PBEMove.None)
                {
                    actions[i].FightMove = pkmn.TempLockedMove;
                }
                else if (pkmn.ChoiceLockedMove != PBEMove.None)
                {
                    actions[i].FightMove = pkmn.ChoiceLockedMove;
                }
                else
                {
                    int index;
                    do
                    {
                        index = PBEUtils.RNG.Next(0, pkmn.Moves.Length);
                        actions[i].FightMove = pkmn.Moves[index];
                    } while (pkmn.PP[index] == 0); // PP of PBEMove.None is always 0 as well
                }
                if (pkmn.TempLockedTargets != PBETarget.None)
                {
                    actions[i].FightTargets = pkmn.TempLockedTargets;
                }
                else
                {
                    actions[i].FightTargets = DecideTargets(pkmn, actions[i].FightMove);
                }
            }
            return(actions);
        }
Beispiel #16
0
        public PBEPkmnStatChangedPacket(PBEPokemon pokemon, PBEStat stat, sbyte oldValue, sbyte newValue)
        {
            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)(Stat = stat));
            bytes.Add((byte)(OldValue = oldValue));
            bytes.Add((byte)(NewValue = newValue));
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
Beispiel #17
0
        public PBEMoveLockPacket(PBEPokemon moveUser, PBEMove lockedMove, PBETarget lockedTargets, PBEMoveLockType moveLockType)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(MoveUser = moveUser.FieldPosition));
            bytes.Add((MoveUserTeam = moveUser.Team).Id);
            bytes.AddRange(BitConverter.GetBytes((ushort)(LockedMove = lockedMove)));
            bytes.Add((byte)(LockedTargets = lockedTargets));
            bytes.Add((byte)(MoveLockType = moveLockType));
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
        internal PBEMoveUsedPacket(PBEPokemon moveUser, PBEMove move, bool reveal)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(MoveUser = moveUser.FieldPosition));
            bytes.Add((MoveUserTeam = moveUser.Team).Id);
            bytes.AddRange(BitConverter.GetBytes((ushort)(Move = move)));
            bytes.Add((byte)((Reveal = reveal) ? 1 : 0));
            bytes.InsertRange(0, BitConverter.GetBytes((short)bytes.Count));
            Buffer = new ReadOnlyCollection <byte>(bytes);
        }
Beispiel #19
0
 internal PBEMoveFailedPacket(PBEPokemon moveUser, PBEPokemon pokemon2, PBEFailReason failReason)
 {
     var bytes = new List<byte>();
     bytes.AddRange(BitConverter.GetBytes(Code));
     bytes.Add((byte)(MoveUser = moveUser.FieldPosition));
     bytes.Add((MoveUserTeam = moveUser.Team).Id);
     bytes.Add((byte)(Pokemon2 = pokemon2.FieldPosition));
     bytes.Add((Pokemon2Team = pokemon2.Team).Id);
     bytes.Add((byte)(FailReason = failReason));
     bytes.InsertRange(0, BitConverter.GetBytes((short)bytes.Count));
     Buffer = new ReadOnlyCollection<byte>(bytes);
 }
 internal PBETypeChangedPacket(PBEPokemon pokemon, PBEType type1, PBEType type2)
 {
     using (var ms = new MemoryStream())
         using (var w = new EndianBinaryWriter(ms, encoding: EncodingType.UTF16))
         {
             w.Write(Code);
             w.Write(Pokemon = pokemon.FieldPosition);
             w.Write((PokemonTeam = pokemon.Team).Id);
             w.Write(Type1 = type1);
             w.Write(Type2 = type2);
             Data          = new ReadOnlyCollection <byte>(ms.ToArray());
         }
 }
Beispiel #21
0
        internal PBEPkmnStatChangedPacket(PBEPokemon pokemon, PBEStat stat, sbyte oldValue, sbyte newValue)
        {
            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)(Stat = stat));
            bytes.Add((byte)(OldValue = oldValue));
            bytes.Add((byte)(NewValue = newValue));
            bytes.InsertRange(0, BitConverter.GetBytes((short)bytes.Count));
            Buffer = new ReadOnlyCollection <byte>(bytes);
        }
Beispiel #22
0
 internal PBEMoveMissedPacket(PBEPokemon moveUser, PBEPokemon pokemon2)
 {
     using (var ms = new MemoryStream())
         using (var w = new EndianBinaryWriter(ms, encoding: EncodingType.UTF16))
         {
             w.Write(Code);
             w.Write(MoveUser = moveUser.FieldPosition);
             w.Write((MoveUserTeam = moveUser.Team).Id);
             w.Write(Pokemon2 = pokemon2.FieldPosition);
             w.Write((Pokemon2Team = pokemon2.Team).Id);
             Data = new ReadOnlyCollection <byte>(ms.ToArray());
         }
 }
Beispiel #23
0
        internal PBEMoveLockPacket(PBEPokemon moveUser, PBEMove lockedMove, PBETurnTarget lockedTargets, PBEMoveLockType moveLockType)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(MoveUser = moveUser.FieldPosition));
            bytes.Add((MoveUserTeam = moveUser.Team).Id);
            bytes.AddRange(BitConverter.GetBytes((ushort)(LockedMove = lockedMove)));
            bytes.Add((byte)(LockedTargets = lockedTargets));
            bytes.Add((byte)(MoveLockType = moveLockType));
            bytes.InsertRange(0, BitConverter.GetBytes((short)bytes.Count));
            Buffer = new ReadOnlyCollection <byte>(bytes);
        }
        public PBEItemPacket(PBEPokemon itemHolder, PBEPokemon pokemon2, PBEItem item, PBEItemAction itemAction)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(ItemHolder = itemHolder.FieldPosition));
            bytes.Add((ItemHolderTeam = itemHolder.Team).Id);
            bytes.Add((byte)(Pokemon2 = pokemon2.FieldPosition));
            bytes.Add((Pokemon2Team = pokemon2.Team).Id);
            bytes.AddRange(BitConverter.GetBytes((ushort)(Item = item)));
            bytes.Add((byte)(ItemAction = itemAction));
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
 internal PBEMovePPChangedPacket(PBEPokemon moveUser, PBEMove move, int amountReduced)
 {
     using (var ms = new MemoryStream())
         using (var w = new EndianBinaryWriter(ms, encoding: EncodingType.UTF16))
         {
             w.Write(Code);
             w.Write(MoveUser = moveUser.FieldPosition);
             w.Write((MoveUserTeam = moveUser.Team).Id);
             w.Write(Move          = move);
             w.Write(AmountReduced = amountReduced);
             Data = new ReadOnlyCollection <byte>(ms.ToArray());
         }
 }
        private static void ScoreStatChange(PBEPokemon user, PBEPokemon target, PBEStat stat, int change, ref double score)
        {
            // TODO: Do we need the stat change? Physical vs special vs status users, and base stats/transform stats/power trick stats
            sbyte original      = target.GetStatChange(stat);
            sbyte maxStatChange = user.Team.Battle.Settings.MaxStatChange;

            change = Math.Max(-maxStatChange, Math.Min(maxStatChange, original + change)) - original;
            if (change != 0)
            {
                score += (user.Team == target.Team ? +1 : -1) * change * 10;
                score += HPAware(target.HPPercentage, -20, +10);
            }
        }
Beispiel #27
0
        public PBEAbilityPacket(PBEPokemon abilityOwner, PBEPokemon pokemon2, PBEAbility ability, PBEAbilityAction abilityAction)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(AbilityOwner = abilityOwner.FieldPosition));
            bytes.Add((AbilityOwnerTeam = abilityOwner.Team).Id);
            bytes.Add((byte)(Pokemon2 = pokemon2.FieldPosition));
            bytes.Add((Pokemon2Team = pokemon2.Team).Id);
            bytes.Add((byte)(Ability = ability));
            bytes.Add((byte)(AbilityAction = abilityAction));
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
Beispiel #28
0
        public PBEStatus1Packet(PBEPokemon status1Receiver, PBEPokemon pokemon2, PBEStatus1 status1, PBEStatusAction statusAction)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(Status1Receiver = status1Receiver.FieldPosition));
            bytes.Add((Status1ReceiverTeam = status1Receiver.Team).Id);
            bytes.Add((byte)(Pokemon2 = pokemon2.FieldPosition));
            bytes.Add((Pokemon2Team = pokemon2.Team).Id);
            bytes.Add((byte)(Status1 = status1));
            bytes.Add((byte)(StatusAction = statusAction));
            Buffer = BitConverter.GetBytes((short)bytes.Count).Concat(bytes);
        }
Beispiel #29
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);
        }
        internal PBEStatus1Packet(PBEPokemon status1Receiver, PBEPokemon pokemon2, PBEStatus1 status1, PBEStatusAction statusAction)
        {
            var bytes = new List <byte>();

            bytes.AddRange(BitConverter.GetBytes(Code));
            bytes.Add((byte)(Status1Receiver = status1Receiver.FieldPosition));
            bytes.Add((Status1ReceiverTeam = status1Receiver.Team).Id);
            bytes.Add((byte)(Pokemon2 = pokemon2.FieldPosition));
            bytes.Add((Pokemon2Team = pokemon2.Team).Id);
            bytes.Add((byte)(Status1 = status1));
            bytes.Add((byte)(StatusAction = statusAction));
            bytes.InsertRange(0, BitConverter.GetBytes((short)bytes.Count));
            Buffer = new ReadOnlyCollection <byte>(bytes);
        }