Added badges
							parent
							
								
									6e9b6d0449
								
							
						
					
					
						commit
						66744ead65
					
				|  | @ -5,5 +5,5 @@ namespace Tiger.Communication.Messages; | |||
| 
 | ||||
| public interface IMessageHandler | ||||
| { | ||||
|     Task TryHandleAsync(GameSession session, ClientMessage request); | ||||
|     Task TryHandleAsync(GameSession gameSession, ClientMessage request); | ||||
| } | ||||
|  | @ -150,7 +150,7 @@ public enum IncomingHeaders : short | |||
|     GetRoomEntryTileEvent = 3559, | ||||
|     GetRoomSettingsEvent = 3129, | ||||
|     GetRoomVisitsEvent = 3526, | ||||
|     GetSelectedBadgesEvent = 2091, | ||||
|     GetSelectedBadgesMessageEvent = 2091, | ||||
|     GetSellablePetPalettesEvent = 1756, | ||||
|     GetSongInfoEvent = 3082, | ||||
|     GetSoundSettingsEvent = 2388, | ||||
|  |  | |||
|  | @ -0,0 +1,28 @@ | |||
| using Tiger.Communication.Messages.Interfaces; | ||||
| using Tiger.Communication.Messages.Outgoing.Inventory.Badges; | ||||
| using Tiger.Communication.Messages.Types; | ||||
| using Tiger.Networking.Game.Sessions; | ||||
| 
 | ||||
| namespace Tiger.Communication.Messages.Incoming.Inventory.Badges; | ||||
| 
 | ||||
| public class GetBadgesEvent : IMessageEvent | ||||
| { | ||||
|     private readonly IGameSessionManager _gameSessionManager; | ||||
| 
 | ||||
|     public GetBadgesEvent(IGameSessionManager gameSessionManager) | ||||
|     { | ||||
|         _gameSessionManager = gameSessionManager; | ||||
|     } | ||||
|      | ||||
|     public IncomingHeaders Header => IncomingHeaders.GetBadgesEvent; | ||||
|     public async Task HandleAsync(GameSession gameSession, ClientMessage request) | ||||
|     { | ||||
|         if (gameSession.Habbo == null) | ||||
|         { | ||||
|             await _gameSessionManager.CloseAsync("Not logged in", gameSession); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         await gameSession.SendComposerAsync(new BadgesComposer(gameSession.Habbo.Badges)); | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,59 @@ | |||
| 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>(); | ||||
|         foreach (var currentBadge in gameSession.Habbo.Badges) | ||||
|         { | ||||
|             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)); | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,37 @@ | |||
| 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.Users; | ||||
| 
 | ||||
| public class GetSelectedBadgesMessageEvent : IMessageEvent | ||||
| { | ||||
|     private readonly IGameSessionManager _gameSessionManager; | ||||
|     private readonly IRepository<Badge> _badgeRepository; | ||||
| 
 | ||||
|     public GetSelectedBadgesMessageEvent(IGameSessionManager gameSessionManager, IRepository<Badge> badgeRepository) | ||||
|     { | ||||
|         _gameSessionManager = gameSessionManager; | ||||
|         _badgeRepository = badgeRepository; | ||||
|     } | ||||
|      | ||||
|     public IncomingHeaders Header => IncomingHeaders.GetSelectedBadgesMessageEvent; | ||||
|     public async Task HandleAsync(GameSession gameSession, ClientMessage request) | ||||
|     { | ||||
|         if (gameSession.Habbo == null) | ||||
|         { | ||||
|             await _gameSessionManager.CloseAsync("Not logged in", gameSession); | ||||
|             return; | ||||
|         } | ||||
|          | ||||
|         var habboId = request.ReadInt32(); | ||||
| 
 | ||||
|         if (habboId == null) return; | ||||
| 
 | ||||
|         var badges = await _badgeRepository.FindByAsync(b => b.Habbo.Id == habboId && b.Slot > 0); | ||||
|         await gameSession.SendComposerAsync(new HabboUserBadgesMessageComposer(habboId.Value, badges.ToList())); | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,37 @@ | |||
| using Tiger.Communication.Messages.Interfaces; | ||||
| using Tiger.Communication.Messages.Types; | ||||
| using Tiger.Game.Habbos; | ||||
| 
 | ||||
| namespace Tiger.Communication.Messages.Outgoing.Inventory.Badges; | ||||
| 
 | ||||
| public class BadgesComposer : IMessageComposer | ||||
| { | ||||
|     private readonly IReadOnlyList<Badge> _badges; | ||||
| 
 | ||||
|     public BadgesComposer(IEnumerable<Badge>? badges) | ||||
|     { | ||||
|         _badges = badges != null ? badges.ToList() : new List<Badge>(); | ||||
|     } | ||||
| 
 | ||||
|     public OutgoingHeaders Header => OutgoingHeaders.BadgesComposer; | ||||
|     public void Compose(ServerMessage message) | ||||
|     { | ||||
|         message.AppendInt32(_badges.Count); | ||||
| 
 | ||||
|         foreach (var badge in _badges) | ||||
|         { | ||||
|             message.AppendInt32(badge.Id); | ||||
|             message.AppendString(badge.Code); | ||||
|         } | ||||
| 
 | ||||
|         var wearingBadges = _badges.Where(b => b.Slot > 0).ToList(); | ||||
|          | ||||
|         message.AppendInt32(wearingBadges.Count); | ||||
| 
 | ||||
|         foreach (var wearingBadge in wearingBadges) | ||||
|         { | ||||
|             message.AppendInt32(wearingBadge.Slot); | ||||
|             message.AppendString(wearingBadge.Code); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -432,7 +432,7 @@ public enum OutgoingHeaders | |||
|     UpdateStackHeightTileHeightComposer = 2816, | ||||
|     UpdateThreadMessageComposer = 2528, | ||||
|     UseObjectMessageComposer = 1774, | ||||
|     UserBadgesComposer = 1087, | ||||
|     HabboUserBadgesMessageComposer = 1087, | ||||
|     UserBannedMessageComposer = 1683, | ||||
|     UserBcLimitsComposer = -1, | ||||
|     UserChangeMessageComposer = 3920, | ||||
|  |  | |||
|  | @ -0,0 +1,30 @@ | |||
| using Tiger.Communication.Messages.Interfaces; | ||||
| using Tiger.Communication.Messages.Types; | ||||
| using Tiger.Game.Habbos; | ||||
| 
 | ||||
| namespace Tiger.Communication.Messages.Outgoing.Users; | ||||
| 
 | ||||
| public class HabboUserBadgesMessageComposer : IMessageComposer | ||||
| { | ||||
|     private readonly int _habboId; | ||||
|     private readonly ICollection<Badge> _badges; | ||||
| 
 | ||||
|     public HabboUserBadgesMessageComposer(int habboId, ICollection<Badge> badges) | ||||
|     { | ||||
|         _habboId = habboId; | ||||
|         _badges = badges; | ||||
|     } | ||||
| 
 | ||||
|     public OutgoingHeaders Header => OutgoingHeaders.HabboUserBadgesMessageComposer; | ||||
|     public void Compose(ServerMessage message) | ||||
|     { | ||||
|         message.AppendInt32(_habboId); | ||||
|         message.AppendInt32(_badges.Count); | ||||
| 
 | ||||
|         foreach (var badge in _badges) | ||||
|         { | ||||
|             message.AppendInt32(badge.Slot); | ||||
|             message.AppendString(badge.Code); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,9 @@ | |||
| namespace Tiger.Game.Habbos; | ||||
| 
 | ||||
| public class Badge | ||||
| { | ||||
|     public virtual int Id { get; set; } | ||||
|     public virtual Habbo Habbo { get; set; } = null!; | ||||
|     public virtual string Code { get; set; } = null!; | ||||
|     public virtual int Slot { get; set; } | ||||
| } | ||||
|  | @ -0,0 +1,16 @@ | |||
| using FluentNHibernate.Mapping; | ||||
| 
 | ||||
| namespace Tiger.Game.Habbos; | ||||
| 
 | ||||
| public class BadgeMap : ClassMap<Badge> | ||||
| { | ||||
|     public BadgeMap() | ||||
|     { | ||||
|         Table("habbo_badges"); | ||||
|         LazyLoad(); | ||||
|         Id(b => b.Id).Column("id").GeneratedBy.Identity(); | ||||
|         References(b => b.Habbo).Column("habbo_id").Not.Nullable(); | ||||
|         Map(b => b.Code).Column("code").Not.Nullable(); | ||||
|         Map(b => b.Slot).Column("slot").Not.Nullable(); | ||||
|     } | ||||
| } | ||||
|  | @ -18,4 +18,5 @@ public class Habbo | |||
|     public virtual int? GroupId { get; set; } | ||||
|     public virtual string? SsoTicket { get; set; } | ||||
|     public virtual IEnumerable<Activitypoints>? Activitypoints { get; set; } | ||||
|     public virtual IEnumerable<Badge>? Badges { get; set; } | ||||
| } | ||||
|  | @ -24,5 +24,6 @@ public class HabboMap : ClassMap<Habbo> | |||
|         Map(h => h.GroupId).Column("group_id").Nullable(); | ||||
|         Map(h => h.SsoTicket).Column("sso_ticket").Nullable(); | ||||
|         HasMany<Activitypoints>(h => h.Activitypoints).LazyLoad().Inverse().Cascade.All(); | ||||
|         HasMany<Badge>(h => h.Badges).LazyLoad().Inverse().Cascade.All(); | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue