TigerEmu/Communication/Messages/Incoming/Inventory/Badges/SetActivatedBadgesEvent.cs

60 lines
2.0 KiB
C#

using System.Collections.ObjectModel;
using Tiger.Communication.Messages.Interfaces;
using Tiger.Communication.Messages.Outgoing.Users;
using Tiger.Communication.Messages.Types;
using Tiger.Game.Habbos;
using Tiger.Networking.Game.Sessions;
using Tiger.Storage;
namespace Tiger.Communication.Messages.Incoming.Inventory.Badges;
public class SetActivatedBadgesEvent : IMessageEvent
{
private readonly IGameSessionManager _gameSessionManager;
private readonly IRepository<Badge> _badgeRepository;
public SetActivatedBadgesEvent(IGameSessionManager gameSessionManager, IRepository<Badge> badgeRepository)
{
_gameSessionManager = gameSessionManager;
_badgeRepository = badgeRepository;
}
public IncomingHeaders Header => IncomingHeaders.SetActivatedBadgesEvent;
public async Task HandleAsync(GameSession gameSession, ClientMessage request)
{
if (gameSession.Habbo == null)
{
await _gameSessionManager.CloseAsync("Not logged in", gameSession);
return;
}
if (gameSession.Habbo.Badges == null)
return;
var wearingBadges = new Collection<Badge>();
var current = gameSession.Habbo.Badges.Where(b => b.Slot != 0);
foreach (var currentBadge in current)
{
currentBadge.Slot = 0;
}
for (var i = 0; i < 5; i++)
{
var slotId = request.ReadInt32();
var code = request.ReadString();
if (slotId == null || slotId is < 1 or > 5 || string.IsNullOrEmpty(code)) continue;
var badge = gameSession.Habbo.Badges.FirstOrDefault(b => b.Code == code);
if (badge == null) continue;
badge.Slot = slotId.Value;
wearingBadges.Add(badge);
_badgeRepository.SaveAsync(badge);
}
await gameSession.SendComposerAsync(new HabboUserBadgesMessageComposer(gameSession.Habbo.Id, wearingBadges));
}
}