// // RaidPacket.cs // // Copyright (c) František Boháček. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using NosSmooth.Packets.Enums.Raids; using NosSmooth.PacketSerializer.Abstractions.Attributes; namespace NosSmooth.Packets.Server.Raids; /// /// Raid status packet. Sent for various raid operations. /// /// /// For every type the rest of the packet is different. /// Fields start with the type they are present for. /// /// The status type. /// The id of the leader, null if leaving. Present only for Leader type. /// The type of the leave type. Present only for Leave type. /// The ids of players in the raid. Present only for ListMembers. /// Health of the players. Present only for PlayerHealths. [PacketHeader("raidf", PacketSource.Server)] [PacketHeader("raid", PacketSource.Server)] [GenerateSerializer(true)] public record RaidPacket ( [PacketIndex(0)] RaidPacketType Type, [PacketConditionalIndex(1, "Type", false, RaidPacketType.Leader)] long? LeaderId, [PacketConditionalIndex(2, "Type", false, RaidPacketType.JoinLeave)] RaidJoinLeaveType? JoinLeaveType, [PacketConditionalListIndex(3, "Type", false, RaidPacketType.ListMembers, ListSeparator = ' ')] IReadOnlyList? ListMembersPlayerIds, [PacketConditionalListIndex(4, "Type", false, RaidPacketType.PlayerHealths, InnerSeparator = '.', ListSeparator = ' ')] IReadOnlyList? PlayerHealths ) : IPacket;