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