server-master/srcs/Plugin.RainbowBattle/EventHandlers/RainbowBattleLeaverBusterRefreshEventHandler.cs
2026-02-10 18:21:30 +01:00

33 lines
No EOL
1.3 KiB
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.DAL.Redis.Locks;
using PhoenixLib.Events;
using WingsAPI.Data.Character;
using WingsEmu.Game.Networking;
using WingsEmu.Game.RainbowBattle.Event;
namespace Plugin.RainbowBattle.EventHandlers
{
public class RainbowBattleLeaverBusterRefreshEventHandler : IAsyncEventProcessor<RainbowBattleLeaverBusterRefreshEvent>
{
private readonly IExpirableLockService _lock;
public RainbowBattleLeaverBusterRefreshEventHandler(IExpirableLockService @lock) => _lock = @lock;
public async Task HandleAsync(RainbowBattleLeaverBusterRefreshEvent e, CancellationToken cancellation)
{
IClientSession session = e.Sender;
DateTime nextMonth = DateTime.UtcNow.Date.AddMonths(1).AddDays(-DateTime.UtcNow.Date.Day + 1);
bool canRefresh = await _lock.TryAddTemporaryLockAsync($"game:locks:rainbow-battle-leaver-buster:{session.PlayerEntity.Id}", nextMonth);
if (!e.Force && !canRefresh)
{
return;
}
session.PlayerEntity.RainbowBattleLeaverBusterDto ??= new RainbowBattleLeaverBusterDto();
session.PlayerEntity.RainbowBattleLeaverBusterDto.Exits = 0;
}
}
}