// // RaidHpMpResponder.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.Core.Packets; using NosSmooth.Game.Data.Info; using NosSmooth.Game.Data.Social; using NosSmooth.Packets.Server.Raids; using Remora.Results; namespace NosSmooth.Game.PacketHandlers.Raids; /// /// A responder to , . /// public class RaidHpMpResponder : IPacketResponder, IPacketResponder { private readonly Game _game; /// /// Initializes a new instance of the class. /// /// The game. public RaidHpMpResponder(Game game) { _game = game; } /// public async Task Respond(PacketEventArgs packetArgs, CancellationToken ct = default) { var packet = packetArgs.Packet; await _game.UpdateRaidAsync ( raid => { foreach (var member in raid.Members ?? (IReadOnlyList)Array.Empty()) { var data = packet.HpSubPackets?.FirstOrDefault(x => x.PlayerId == member.PlayerId); if (data is not null) { member.Hp ??= new Health(); member.Hp.Percentage = data.HpPercentage; } } return raid; }, ct: ct ); return Result.FromSuccess(); } /// public async Task Respond(PacketEventArgs packetArgs, CancellationToken ct = default) { var packet = packetArgs.Packet; await _game.UpdateRaidAsync ( raid => { foreach (var member in raid.Members ?? (IReadOnlyList)Array.Empty()) { var data = packet.HpSubPackets?.FirstOrDefault(x => x.PlayerId == member.PlayerId); if (data is not null) { member.Mp ??= new Health(); member.Mp.Percentage = data.HpPercentage; } } return raid; }, ct: ct ); return Result.FromSuccess(); } }