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 _badgeRepository; public SetActivatedBadgesEvent(IGameSessionManager gameSessionManager, IRepository 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(); 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)); } }