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