Example #1
0
        /// <summary>
        /// Writes a packet to the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="packet">The packet to write.</param>
        /// <param name="message">The message to write into.</param>
        public override void WriteToMessage(IOutboundPacket packet, ref INetworkMessage message)
        {
            if (!(packet is ProjectilePacket projectilePacket))
            {
                this.Logger.Warning($"Invalid packet {packet.GetType().Name} routed to {this.GetType().Name}");

                return;
            }

            message.AddByte(projectilePacket.PacketType.ToByte());

            message.AddLocation(projectilePacket.FromLocation);
            message.AddLocation(projectilePacket.ToLocation);
            message.AddByte((byte)projectilePacket.Effect);
        }
Example #2
0
        /// <summary>
        /// Writes a packet to the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="packet">The packet to write.</param>
        /// <param name="message">The message to write into.</param>
        public override void WriteToMessage(IOutboundPacket packet, ref INetworkMessage message)
        {
            if (!(packet is CreatureMovedPacket creatureMovedPacket))
            {
                this.Logger.LogWarning($"Invalid packet {packet.GetType().Name} routed to {this.GetType().Name}");

                return;
            }

            message.AddByte(creatureMovedPacket.PacketType.ToByte());

            message.AddLocation(creatureMovedPacket.FromLocation);
            message.AddByte(creatureMovedPacket.FromStackpos);
            message.AddLocation(creatureMovedPacket.ToLocation);
        }
Example #3
0
        /// <summary>
        /// Writes a packet to the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="packet">The packet to write.</param>
        /// <param name="message">The message to write into.</param>
        public override void WriteToMessage(IOutboundPacket packet, ref INetworkMessage message)
        {
            if (!(packet is TileUpdatePacket tileUpdatePacket))
            {
                this.Logger.LogWarning($"Invalid packet {packet.GetType().Name} routed to {this.GetType().Name}");

                return;
            }

            message.AddByte(tileUpdatePacket.PacketType.ToByte());

            message.AddLocation(tileUpdatePacket.UpdatedTile.Location);

            if (tileUpdatePacket.UpdatedTile != null)
            {
                message.AddBytes(this.BuildDescription(tileUpdatePacket.Player, tileUpdatePacket.UpdatedTile));
                message.AddByte(0x00); // skip count
            }
            else
            {
                message.AddByte(0x01); // skip count
            }

            // marks the end.
            message.AddByte(byte.MaxValue);
        }
Example #4
0
        /// <summary>
        /// Writes a packet to the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="packet">The packet to write.</param>
        /// <param name="message">The message to write into.</param>
        public override void WriteToMessage(IOutboundPacket packet, ref INetworkMessage message)
        {
            if (!(packet is TileUpdatePacket tileUpdatePacket))
            {
                this.Logger.Warning($"Invalid packet {packet.GetType().Name} routed to {this.GetType().Name}");

                return;
            }

            message.AddByte(tileUpdatePacket.PacketType.ToByte());

            message.AddLocation(tileUpdatePacket.Location);

            if (tileUpdatePacket.DescriptionBytes.Length > 0)
            {
                message.AddBytes(tileUpdatePacket.DescriptionBytes);
                message.AddByte(0x00); // skip count
            }
            else
            {
                message.AddByte(0x01); // skip count
            }

            message.AddByte(byte.MaxValue);
        }
        /// <summary>
        /// Writes a packet to the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="packet">The packet to write.</param>
        /// <param name="message">The message to write into.</param>
        public override void WriteToMessage(IOutboundPacket packet, ref INetworkMessage message)
        {
            if (!(packet is ProjectilePacket projectilePacket))
            {
                this.Logger.LogWarning($"Invalid packet {packet.GetType().Name} routed to {this.GetType().Name}");

                return;
            }

            if (projectilePacket.Effect == ProjectileType.None)
            {
                this.Logger.LogDebug($"Ignoring {packet.GetType().Name} with {ProjectileType.None} effect.");

                return;
            }

            message.AddByte(projectilePacket.PacketType.ToByte());

            message.AddLocation(projectilePacket.FromLocation);
            message.AddLocation(projectilePacket.ToLocation);

            byte valueToSend = projectilePacket.Effect switch
            {
                ProjectileType.Spear => 0x01,
                ProjectileType.Bolt => 0x02,
                ProjectileType.Arrow => 0x03,
                ProjectileType.OrangeOrb => 0x04,
                ProjectileType.BlueOrb => 0x05,
                ProjectileType.PoisonArrow => 0x06,
                ProjectileType.BurstArrow => 0x07,
                ProjectileType.ThrowingStar => 0x08,
                ProjectileType.ThrowingKnife => 0x09,
                ProjectileType.SmallStone => 0x10,
                ProjectileType.BlackOrb => 0x11,
                ProjectileType.LargeRock => 0x12,
                ProjectileType.Snowball => 0x13,
                ProjectileType.PowerBolt => 0x14,
                ProjectileType.GreenOrb => 0x15,
                _ => 0x00,
            };

            message.AddByte(valueToSend);
        }
Example #6
0
        /// <summary>
        /// Writes a packet to the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="packet">The packet to write.</param>
        /// <param name="message">The message to write into.</param>
        public override void WriteToMessage(IOutboundPacket packet, ref INetworkMessage message)
        {
            if (!(packet is MagicEffectPacket magicEffectPacket))
            {
                this.Logger.LogWarning($"Invalid packet {packet.GetType().Name} routed to {this.GetType().Name}");

                return;
            }

            if (magicEffectPacket.Effect == AnimatedEffect.None)
            {
                return;
            }

            message.AddByte(magicEffectPacket.PacketType.ToByte());

            message.AddLocation(magicEffectPacket.Location);

            byte valueToSend = magicEffectPacket.Effect switch
            {
                AnimatedEffect.XBlood => 0x01,
                AnimatedEffect.RingsBlue => 0x02,
                AnimatedEffect.Puff => 0x03,
                AnimatedEffect.SparkYellow => 0x04,
                AnimatedEffect.DamageExplosion => 0x05,
                AnimatedEffect.DamageMagicMissile => 0x06,
                AnimatedEffect.AreaFlame => 0x07,
                AnimatedEffect.RingsYellow => 0x08,
                AnimatedEffect.RingsGreen => 0x09,
                AnimatedEffect.XGray => 0x0A,
                AnimatedEffect.BubbleBlue => 0x0B,
                AnimatedEffect.DamageEnergy => 0x0C,
                AnimatedEffect.GlitterBlue => 0x0D,
                AnimatedEffect.GlitterRed => 0x0E,
                AnimatedEffect.GlitterGreen => 0x0F,
                AnimatedEffect.Flame => 0x10,
                AnimatedEffect.Poison => 0x11,
                AnimatedEffect.BubbleBlack => 0x12,
                AnimatedEffect.SoundGreen => 0x13,
                AnimatedEffect.SoundRed => 0x14,
                AnimatedEffect.DamageVenomMissile => 0x15,
                AnimatedEffect.SoundYellow => 0x16,
                AnimatedEffect.SoundPurple => 0x17,
                AnimatedEffect.SoundBlue => 0x18,
                AnimatedEffect.SoundWhite => 0x19,
                _ => 0x03,
            };

            message.AddByte(valueToSend);
        }
Example #7
0
        /// <summary>
        /// Writes a packet to the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="packet">The packet to write.</param>
        /// <param name="message">The message to write into.</param>
        public override void WriteToMessage(IOutboundPacket packet, ref INetworkMessage message)
        {
            if (!(packet is AddCreaturePacket addCreaturePacket))
            {
                this.Logger.LogWarning($"Invalid packet {packet.GetType().Name} routed to {this.GetType().Name}");

                return;
            }

            message.AddByte(addCreaturePacket.PacketType.ToByte());

            message.AddLocation(addCreaturePacket.Creature.Location);
            message.AddCreature(addCreaturePacket.Creature, addCreaturePacket.AsKnown, addCreaturePacket.RemoveThisCreatureId);
        }
        /// <summary>
        /// Writes a packet to the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="packet">The packet to write.</param>
        /// <param name="message">The message to write into.</param>
        public override void WriteToMessage(IOutboundPacket packet, ref INetworkMessage message)
        {
            if (!(packet is RemoveAtLocationPacket removeAtPositionPacket))
            {
                this.Logger.LogWarning($"Invalid packet {packet.GetType().Name} routed to {this.GetType().Name}");

                return;
            }

            message.AddByte(removeAtPositionPacket.PacketType.ToByte());

            message.AddLocation(removeAtPositionPacket.Location);
            message.AddByte(removeAtPositionPacket.Stackpos);
        }
Example #9
0
        /// <summary>
        /// Writes a packet to the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="packet">The packet to write.</param>
        /// <param name="message">The message to write into.</param>
        public override void WriteToMessage(IOutboundPacket packet, ref INetworkMessage message)
        {
            if (!(packet is MagicEffectPacket magicEffectPacket))
            {
                this.Logger.Warning($"Invalid packet {packet.GetType().Name} routed to {this.GetType().Name}");

                return;
            }

            message.AddByte(magicEffectPacket.PacketType);

            message.AddLocation(magicEffectPacket.Location);
            message.AddByte((byte)magicEffectPacket.Effect);
        }
Example #10
0
        /// <summary>
        /// Writes a packet to the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="packet">The packet to write.</param>
        /// <param name="message">The message to write into.</param>
        public override void WriteToMessage(IOutboundPacket packet, ref INetworkMessage message)
        {
            if (!(packet is MapDescriptionPacket mapDescriptionPacket))
            {
                this.Logger.LogWarning($"Invalid packet {packet.GetType().Name} routed to {this.GetType().Name}");

                return;
            }

            message.AddByte(mapDescriptionPacket.PacketType.ToByte());

            message.AddLocation(mapDescriptionPacket.Origin);

            message.AddBytes(mapDescriptionPacket.DescriptionBytes);
        }
        /// <summary>
        /// Writes a packet to the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="packet">The packet to write.</param>
        /// <param name="message">The message to write into.</param>
        public override void WriteToMessage(IOutboundPacket packet, ref INetworkMessage message)
        {
            if (!(packet is AnimatedTextPacket animatedTextPacket))
            {
                this.Logger.LogWarning($"Invalid packet {packet.GetType().Name} routed to {this.GetType().Name}");

                return;
            }

            message.AddByte(animatedTextPacket.PacketType.ToByte());

            message.AddLocation(animatedTextPacket.Location);
            message.AddByte((byte)animatedTextPacket.Color);
            message.AddString(animatedTextPacket.Text);
        }
Example #12
0
        /// <summary>
        /// Writes a packet to the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="packet">The packet to write.</param>
        /// <param name="message">The message to write into.</param>
        public override void WriteToMessage(IOutboundPacket packet, ref INetworkMessage message)
        {
            if (!(packet is CreatureTurnedPacket creatureTurnedPacket))
            {
                this.Logger.Warning($"Invalid packet {packet.GetType().Name} routed to {this.GetType().Name}");

                return;
            }

            message.AddByte(creatureTurnedPacket.PacketType);

            message.AddLocation(creatureTurnedPacket.Creature.Location);
            message.AddByte(creatureTurnedPacket.StackPosition);
            message.AddUInt16(creatureTurnedPacket.Creature.TypeId);
            message.AddUInt32(creatureTurnedPacket.Creature.Id);
            message.AddByte((byte)creatureTurnedPacket.Creature.Direction);
        }
        /// <summary>
        /// Writes a packet to the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="packet">The packet to write.</param>
        /// <param name="message">The message to write into.</param>
        public override void WriteToMessage(IOutboundPacket packet, ref INetworkMessage message)
        {
            if (!(packet is CreatureSpeechPacket creatureSpeechPacket))
            {
                this.Logger.LogWarning($"Invalid packet {packet.GetType().Name} routed to {this.GetType().Name}");

                return;
            }

            message.AddByte(creatureSpeechPacket.PacketType.ToByte());

            message.AddUInt32(0);
            message.AddString(creatureSpeechPacket.SenderName);
            message.AddByte((byte)creatureSpeechPacket.SpeechType);

            switch (creatureSpeechPacket.SpeechType)
            {
            case SpeechType.Say:
            case SpeechType.Whisper:
            case SpeechType.Yell:
            case SpeechType.MonsterSay:
                // case SpeechType.MonsterYell:
                message.AddLocation(creatureSpeechPacket.Location);
                break;

            // case SpeechType.ChannelRed:
            // case SpeechType.ChannelRedAnonymous:
            // case SpeechType.ChannelOrange:
            case SpeechType.ChannelYellow:
                // case SpeechType.ChannelWhite:
                message.AddUInt16((ushort)creatureSpeechPacket.Channel);
                break;

            case SpeechType.RuleViolationReport:
                message.AddUInt32(creatureSpeechPacket.Time);
                break;

            default:
                break;
            }

            message.AddString(creatureSpeechPacket.Text);
        }
Example #14
0
        /// <summary>
        /// Writes a packet to the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="packet">The packet to write.</param>
        /// <param name="message">The message to write into.</param>
        public override void WriteToMessage(IOutboundPacket packet, ref INetworkMessage message)
        {
            if (!(packet is AddCreaturePacket addCreaturePacket))
            {
                this.Logger.LogWarning($"Invalid packet {packet.GetType().Name} routed to {this.GetType().Name}");

                return;
            }

            var client             = this.clientsManager.FindByPlayerId(addCreaturePacket.Player.Id);
            var isCreatureKnown    = client != null && client.KnowsCreatureWithId(addCreaturePacket.Creature.Id);
            var creatureIdToForget = client == null || isCreatureKnown ? 0 : client.ChooseCreatureToRemoveFromKnownSet();

            if (creatureIdToForget > 0)
            {
                client.RemoveKnownCreature(creatureIdToForget);
            }

            message.AddByte(addCreaturePacket.PacketType.ToByte());

            message.AddLocation(addCreaturePacket.Creature.Location);
            message.AddCreature(addCreaturePacket.Creature, isCreatureKnown, creatureIdToForget);
        }