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