From e877f2b51552538ec08319345b0200afd8f7ffab Mon Sep 17 00:00:00 2001 From: Dippys Date: Thu, 5 Feb 2026 19:56:48 +0400 Subject: [PATCH 1/2] Extended Profile Start --- .../GetExtendedProfileByNameMessageParser.cs | 6 +++- .../Users/GetExtendedProfileMessageParser.cs | 7 +++- .../Revision20260112/Revision20260112.cs | 6 ++++ ...ProfileChangedMessageComposerSerializer.cs | 2 +- ...xtendedProfileMessageComposerSerializer.cs | 34 ++++++++++++++++++- 5 files changed, 51 insertions(+), 4 deletions(-) diff --git a/TurboSamplePlugin/Revision/Revision20260112/Parsers/Users/GetExtendedProfileByNameMessageParser.cs b/TurboSamplePlugin/Revision/Revision20260112/Parsers/Users/GetExtendedProfileByNameMessageParser.cs index 0c105ed..6fef912 100644 --- a/TurboSamplePlugin/Revision/Revision20260112/Parsers/Users/GetExtendedProfileByNameMessageParser.cs +++ b/TurboSamplePlugin/Revision/Revision20260112/Parsers/Users/GetExtendedProfileByNameMessageParser.cs @@ -6,5 +6,9 @@ namespace TurboSamplePlugin.Revision.Revision20260112.Parsers.Users; internal class GetExtendedProfileByNameMessageParser : IParser { - public IMessageEvent Parse(IClientPacket packet) => new GetExtendedProfileByNameMessage(); + public IMessageEvent Parse(IClientPacket packet) => + new GetExtendedProfileByNameMessage + { + UserName = packet.PopString() + }; } diff --git a/TurboSamplePlugin/Revision/Revision20260112/Parsers/Users/GetExtendedProfileMessageParser.cs b/TurboSamplePlugin/Revision/Revision20260112/Parsers/Users/GetExtendedProfileMessageParser.cs index ed5e047..b925961 100644 --- a/TurboSamplePlugin/Revision/Revision20260112/Parsers/Users/GetExtendedProfileMessageParser.cs +++ b/TurboSamplePlugin/Revision/Revision20260112/Parsers/Users/GetExtendedProfileMessageParser.cs @@ -1,10 +1,15 @@ using Turbo.Primitives.Messages.Incoming.Users; using Turbo.Primitives.Networking; using Turbo.Primitives.Packets; +using Turbo.Primitives.Players; namespace TurboSamplePlugin.Revision.Revision20260112.Parsers.Users; internal class GetExtendedProfileMessageParser : IParser { - public IMessageEvent Parse(IClientPacket packet) => new GetExtendedProfileMessage(); + public IMessageEvent Parse(IClientPacket packet) => + new GetExtendedProfileMessage + { + UserId = (PlayerId)packet.PopInt() + }; } diff --git a/TurboSamplePlugin/Revision/Revision20260112/Revision20260112.cs b/TurboSamplePlugin/Revision/Revision20260112/Revision20260112.cs index b7f0a5b..d097d03 100644 --- a/TurboSamplePlugin/Revision/Revision20260112/Revision20260112.cs +++ b/TurboSamplePlugin/Revision/Revision20260112/Revision20260112.cs @@ -3117,6 +3117,12 @@ public class Revision20260112 : IRevision MessageComposer.EmailStatusResultComposer ) }, + { + typeof(ExtendedProfileMessageComposer), + new ExtendedProfileMessageComposerSerializer( + MessageComposer.ExtendedProfileMessageComposer + ) + }, { typeof(ExtendedProfileChangedMessageComposer), new ExtendedProfileChangedMessageComposerSerializer( diff --git a/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/ExtendedProfileChangedMessageComposerSerializer.cs b/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/ExtendedProfileChangedMessageComposerSerializer.cs index 489ce99..6658647 100644 --- a/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/ExtendedProfileChangedMessageComposerSerializer.cs +++ b/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/ExtendedProfileChangedMessageComposerSerializer.cs @@ -11,6 +11,6 @@ protected override void Serialize( ExtendedProfileChangedMessageComposer message ) { - // + packet.WriteInteger(message.UserId); } } diff --git a/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/ExtendedProfileMessageComposerSerializer.cs b/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/ExtendedProfileMessageComposerSerializer.cs index 7b11ad2..372548b 100644 --- a/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/ExtendedProfileMessageComposerSerializer.cs +++ b/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/ExtendedProfileMessageComposerSerializer.cs @@ -8,6 +8,38 @@ internal class ExtendedProfileMessageComposerSerializer(int header) { protected override void Serialize(IServerPacket packet, ExtendedProfileMessageComposer message) { - // + packet.WriteInteger(message.UserId); + packet.WriteString(message.UserName); + packet.WriteString(message.Figure); + packet.WriteString(message.Motto); + packet.WriteString(message.CreationDate); + packet.WriteInteger(message.AchievementScore); + packet.WriteInteger(message.FriendCount); + packet.WriteBoolean(message.IsFriend); + packet.WriteBoolean(message.IsFriendRequestSent); + packet.WriteBoolean(message.IsOnline); + + // Guild count and guild data + packet.WriteInteger(message.Guilds.Count); + foreach (var guild in message.Guilds) + { + packet.WriteInteger(guild.GroupId); + packet.WriteString(guild.GroupName); + packet.WriteString(guild.BadgeCode); + packet.WriteString(guild.PrimaryColor); + packet.WriteString(guild.SecondaryColor); + packet.WriteBoolean(guild.Favourite); + packet.WriteInteger(guild.OwnerId); + packet.WriteBoolean(guild.HasForum); + } + + packet.WriteInteger(message.LastAccessSinceInSeconds); + packet.WriteBoolean(message.OpenProfileWindow); + packet.WriteBoolean(message.IsHidden); + packet.WriteInteger(message.AccountLevel); + packet.WriteInteger(message.IntegerField24); + packet.WriteInteger(message.StarGemCount); + packet.WriteBoolean(message.BooleanField26); + packet.WriteBoolean(message.BooleanField27); } } From e179fa98d0453db821fb7012b6632fca7fe38f7c Mon Sep 17 00:00:00 2001 From: Dippys Date: Sat, 7 Feb 2026 11:47:07 +0400 Subject: [PATCH 2/2] Move Guild Data to its own serializer --- .../Users/Data/GuildInfoSerializer.cs | 19 +++++++++++++++++++ ...xtendedProfileMessageComposerSerializer.cs | 13 ++----------- 2 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/Data/GuildInfoSerializer.cs diff --git a/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/Data/GuildInfoSerializer.cs b/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/Data/GuildInfoSerializer.cs new file mode 100644 index 0000000..6bff9d7 --- /dev/null +++ b/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/Data/GuildInfoSerializer.cs @@ -0,0 +1,19 @@ +using Turbo.Primitives.Messages.Outgoing.Users; +using Turbo.Primitives.Packets; + +namespace TurboSamplePlugin.Revision.Revision20260112.Serializers.Users.Data; + +internal class GuildInfoSerializer +{ + public static void Serialize(IServerPacket packet, GuildInfo guild) + { + packet.WriteInteger(guild.GroupId); + packet.WriteString(guild.GroupName); + packet.WriteString(guild.BadgeCode); + packet.WriteString(guild.PrimaryColor); + packet.WriteString(guild.SecondaryColor); + packet.WriteBoolean(guild.Favourite); + packet.WriteInteger(guild.OwnerId); + packet.WriteBoolean(guild.HasForum); + } +} diff --git a/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/ExtendedProfileMessageComposerSerializer.cs b/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/ExtendedProfileMessageComposerSerializer.cs index 372548b..e3afaf6 100644 --- a/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/ExtendedProfileMessageComposerSerializer.cs +++ b/TurboSamplePlugin/Revision/Revision20260112/Serializers/Users/ExtendedProfileMessageComposerSerializer.cs @@ -1,5 +1,6 @@ using Turbo.Primitives.Messages.Outgoing.Users; using Turbo.Primitives.Packets; +using TurboSamplePlugin.Revision.Revision20260112.Serializers.Users.Data; namespace TurboSamplePlugin.Revision.Revision20260112.Serializers.Users; @@ -19,19 +20,9 @@ protected override void Serialize(IServerPacket packet, ExtendedProfileMessageCo packet.WriteBoolean(message.IsFriendRequestSent); packet.WriteBoolean(message.IsOnline); - // Guild count and guild data packet.WriteInteger(message.Guilds.Count); foreach (var guild in message.Guilds) - { - packet.WriteInteger(guild.GroupId); - packet.WriteString(guild.GroupName); - packet.WriteString(guild.BadgeCode); - packet.WriteString(guild.PrimaryColor); - packet.WriteString(guild.SecondaryColor); - packet.WriteBoolean(guild.Favourite); - packet.WriteInteger(guild.OwnerId); - packet.WriteBoolean(guild.HasForum); - } + GuildInfoSerializer.Serialize(packet, guild); packet.WriteInteger(message.LastAccessSinceInSeconds); packet.WriteBoolean(message.OpenProfileWindow);