server-master/srcs/_plugins/WingsEmu.Plugins.PacketHandling/Game/Basic/SitPacketHandler.cs
2026-02-10 18:21:30 +01:00

53 lines
No EOL
1.6 KiB
C#

using System.Threading.Tasks;
using WingsEmu.Game.Battle;
using WingsEmu.Game.Characters.Events;
using WingsEmu.Game.Mates;
using WingsEmu.Game.Mates.Events;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.ClientPackets;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Plugins.PacketHandling.Game.Basic;
public class SitPacketHandler : GenericGamePacketHandlerBase<SitPacket>
{
private readonly IMeditationManager _meditationManager;
public SitPacketHandler(IMeditationManager meditationManager) => _meditationManager = meditationManager;
protected override async Task HandlePacketAsync(IClientSession session, SitPacket packet)
{
if (_meditationManager.HasMeditation(session.PlayerEntity))
{
_meditationManager.RemoveAllMeditation(session.PlayerEntity);
}
if (packet?.Users == null)
{
return;
}
bool syncWithPlayer = false;
foreach (SitSubPacket subPacket in packet.Users)
{
if (subPacket.VisualType == VisualType.Player)
{
await session.RestAsync();
syncWithPlayer = true;
continue;
}
IMateEntity mateEntity = session.PlayerEntity.MateComponent.GetMate(x => x.Id == subPacket.UserId);
if (mateEntity == null)
{
continue;
}
await session.EmitEventAsync(new MateRestEvent
{
MateEntity = mateEntity,
Rest = syncWithPlayer ? session.PlayerEntity.IsSitting : !mateEntity.IsSitting
});
}
}
}