Name several unknown properties.

This commit is contained in:
Ray Koopa 2019-01-04 23:51:48 +01:00
parent c33e1f7987
commit 645db214ca
6 changed files with 47 additions and 34 deletions

View File

@ -134,27 +134,31 @@ namespace Syroot.Worms.OnlineWorms.Server
Player = new ChannelConnectPlayerInfo Player = new ChannelConnectPlayerInfo
{ {
ID = packet.Players[0].ID, ID = packet.Players[0].ID,
Name = "Your Name",
Experience = 1337,
Gold = 1000000,
Rank = 19, Rank = 19,
GuildMarkIndex = 1 GuildMarkIndex = 1,
GuildName = "Your Guild"
} }
}); });
} }
public void HandleChannelUnkInfo(ChannelUnkInfoQuery packet) public void HandleChannelTop20Players(ChannelTop20PlayersQuery packet)
{ {
// Send player rank infos. // Send some simulated player rank infos.
ChannelUnkInfoReply reply = new ChannelUnkInfoReply ChannelTop20PlayersReply reply = new ChannelTop20PlayersReply
{ {
UnknownA = "Test", UnknownA = "Test",
UnkInfos = new List<ChannelUnkInfo>(20) Top20 = new List<ChannelTop20Player>(20)
}; };
for (int i = 0; i < 20; i++) for (int i = 0; i < 20; i++)
{ {
reply.UnkInfos.Add(new ChannelUnkInfo reply.Top20.Add(new ChannelTop20Player
{ {
UnknownA = (ushort)i, Rank = (ushort)((i + 6) / 3),
UnknownB = $"Bla {i + 1}", Name = $"GoodPlayer{(char)('A' + i)}",
UnknownC = (ulong)i Experience = (ulong)(20 - i) * 957
}); });
} }
SendPacket(reply); SendPacket(reply);
@ -165,7 +169,10 @@ namespace Syroot.Worms.OnlineWorms.Server
public void HandleStartSingleGameQuery(StartSingleGameQuery packet) public void HandleStartSingleGameQuery(StartSingleGameQuery packet)
{ {
SendPacket(new StartSingleGameReply()); SendPacket(new StartSingleGameReply
{
Success = packet.RoundType == GameStartRoundType.First
});
} }
#if DEBUG #if DEBUG

View File

@ -27,7 +27,7 @@ namespace Syroot.Worms.OnlineWorms.Server.Net
stream.WriteUInt16(0); // field_1E710 stream.WriteUInt16(0); // field_1E710
stream.WriteUInt32(0); // field_1E714 stream.WriteUInt32(0); // field_1E714
stream.WriteString(Player.ID, 12); stream.WriteString(Player.ID, 12);
stream.WriteString(Player.UnknownA, 10); stream.WriteString(Player.Name, 10);
stream.WriteUInt16(Player.UnknownB); stream.WriteUInt16(Player.UnknownB);
stream.WriteUInt16(Player.UnknownC); stream.WriteUInt16(Player.UnknownC);
stream.WriteUInt16(Player.UnknownD); stream.WriteUInt16(Player.UnknownD);
@ -42,11 +42,11 @@ namespace Syroot.Worms.OnlineWorms.Server.Net
stream.WriteUInt16(Player.UnknownM); stream.WriteUInt16(Player.UnknownM);
stream.WriteUInt16(Player.UnknownN); stream.WriteUInt16(Player.UnknownN);
stream.WriteUInt16(Player.UnknownO); stream.WriteUInt16(Player.UnknownO);
stream.WriteUInt64(Player.UnknownP); stream.WriteUInt64(Player.Experience);
stream.WriteUInt64(Player.UnknownQ); stream.WriteUInt64(Player.Gold);
stream.WriteUInt16(Player.Rank); stream.WriteUInt16(Player.Rank);
stream.WriteUInt16(Player.GuildMarkIndex); stream.WriteUInt16(Player.GuildMarkIndex);
stream.WriteString(Player.UnknownR, 12); stream.WriteString(Player.GuildName, 12);
stream.WriteUInt32(Player.UnknownS); stream.WriteUInt32(Player.UnknownS);
stream.WriteUInt32(0); // v29 stream.WriteUInt32(0); // v29
stream.WriteUInt16(0); // v30 stream.WriteUInt16(0); // v30
@ -73,7 +73,7 @@ namespace Syroot.Worms.OnlineWorms.Server.Net
internal class ChannelConnectPlayerInfo internal class ChannelConnectPlayerInfo
{ {
public string ID { get; set; } // Max. 12 chars public string ID { get; set; } // Max. 12 chars
public string UnknownA { get; set; } // Max. 10 chars public string Name { get; set; } // Max. 10 chars
public ushort UnknownB { get; set; } public ushort UnknownB { get; set; }
public ushort UnknownC { get; set; } public ushort UnknownC { get; set; }
public ushort UnknownD { get; set; } public ushort UnknownD { get; set; }
@ -88,11 +88,11 @@ namespace Syroot.Worms.OnlineWorms.Server.Net
public ushort UnknownM { get; set; } public ushort UnknownM { get; set; }
public ushort UnknownN { get; set; } public ushort UnknownN { get; set; }
public ushort UnknownO { get; set; } public ushort UnknownO { get; set; }
public ulong UnknownP { get; set; } public ulong Experience { get; set; }
public ulong UnknownQ { get; set; } public ulong Gold { get; set; }
public ushort Rank { get; set; } public ushort Rank { get; set; }
public ushort GuildMarkIndex { get; set; } public ushort GuildMarkIndex { get; set; }
public string UnknownR { get; set; } // Max. 12 chars public string GuildName { get; set; } // Max. 12 chars
public uint UnknownS { get; set; } // 4 bytes public uint UnknownS { get; set; } // 4 bytes
public ushort UnknownT { get; set; } public ushort UnknownT { get; set; }
public ushort UnknownU { get; set; } public ushort UnknownU { get; set; }

View File

@ -3,7 +3,7 @@
namespace Syroot.Worms.OnlineWorms.Server.Net namespace Syroot.Worms.OnlineWorms.Server.Net
{ {
/// <summary> /// <summary>
/// Represents an additional server response to a <see cref="ChannelUnkInfoQuery"/>, causing the client to switch /// Represents an additional server response to a <see cref="ChannelTop20PlayersQuery"/>, causing the client to switch
/// to the channel screen (game lobby). /// to the channel screen (game lobby).
/// </summary> /// </summary>
[Packet(PacketType.Channel, 0x44)] [Packet(PacketType.Channel, 0x44)]

View File

@ -7,7 +7,7 @@ namespace Syroot.Worms.OnlineWorms.Server.Net
/// Represents the client request for a <see cref="ChannelConnectReply"/>. /// Represents the client request for a <see cref="ChannelConnectReply"/>.
/// </summary> /// </summary>
[Packet(PacketType.Channel, 0x37)] [Packet(PacketType.Channel, 0x37)]
internal class ChannelUnkInfoQuery : Packet internal class ChannelTop20PlayersQuery : Packet
{ {
// ---- PROPERTIES --------------------------------------------------------------------------------------------- // ---- PROPERTIES ---------------------------------------------------------------------------------------------

View File

@ -5,16 +5,16 @@ using Syroot.BinaryData;
namespace Syroot.Worms.OnlineWorms.Server.Net namespace Syroot.Worms.OnlineWorms.Server.Net
{ {
/// <summary> /// <summary>
/// Represents the server response to a <see cref="ChannelUnkInfoQuery"/>. /// Represents the server response to a <see cref="ChannelTop20PlayersQuery"/>.
/// </summary> /// </summary>
[Packet(PacketType.Channel, 0x36)] [Packet(PacketType.Channel, 0x36)]
internal class ChannelUnkInfoReply : Packet internal class ChannelTop20PlayersReply : Packet
{ {
// ---- PROPERTIES --------------------------------------------------------------------------------------------- // ---- PROPERTIES ---------------------------------------------------------------------------------------------
public string UnknownA { get; set; } // Max. 30 chars public string UnknownA { get; set; } // Max. 30 chars
public IList<ChannelUnkInfo> UnkInfos { get; set; } // Apparently ranks. Client always requests 20 elements. public IList<ChannelTop20Player> Top20 { get; set; } // 20 elements.
// ---- METHODS (INTERNAL) ------------------------------------------------------------------------------------- // ---- METHODS (INTERNAL) -------------------------------------------------------------------------------------
@ -23,11 +23,11 @@ namespace Syroot.Worms.OnlineWorms.Server.Net
internal override void Serialize(PacketStream stream) internal override void Serialize(PacketStream stream)
{ {
stream.WriteString(UnknownA, 30); stream.WriteString(UnknownA, 30);
foreach (ChannelUnkInfo unkInfo in UnkInfos) foreach (ChannelTop20Player top20Player in Top20)
{ {
stream.WriteUInt16(unkInfo.UnknownA); stream.WriteUInt16(top20Player.Rank);
stream.WriteString(unkInfo.UnknownB, 12); stream.WriteString(top20Player.Name, 12);
stream.WriteUInt64(unkInfo.UnknownC); stream.WriteUInt64(top20Player.Experience);
} }
} }
} }
@ -35,10 +35,10 @@ namespace Syroot.Worms.OnlineWorms.Server.Net
/// <summary> /// <summary>
/// Represents a player channel rank, apparently. /// Represents a player channel rank, apparently.
/// </summary> /// </summary>
public class ChannelUnkInfo public class ChannelTop20Player
{ {
public ushort UnknownA { get; set; } public ushort Rank { get; set; }
public string UnknownB { get; set; } // Max. 12 chars public string Name { get; set; } // Max. 12 chars
public ulong UnknownC { get; set; } public ulong Experience { get; set; }
} }
} }

View File

@ -11,19 +11,25 @@ namespace Syroot.Worms.OnlineWorms.Server.Net
{ {
// ---- PROPERTIES --------------------------------------------------------------------------------------------- // ---- PROPERTIES ---------------------------------------------------------------------------------------------
public byte UnknownA { get; set; } public GameStartRoundType RoundType { get; set; }
public byte UnknownB { get; set; } public byte UnknownB { get; set; }
public byte UnknownC { get; set; } public byte UnknownC { get; set; } // 0x3D on first round, 0x3E on any other
// ---- METHODS (INTERNAL) ------------------------------------------------------------------------------------- // ---- METHODS (INTERNAL) -------------------------------------------------------------------------------------
internal override void Deserialize(PacketStream stream) internal override void Deserialize(PacketStream stream)
{ {
UnknownA = stream.Read1Byte(); RoundType = stream.ReadEnum<GameStartRoundType>(true);
UnknownB = stream.Read1Byte(); UnknownB = stream.Read1Byte();
UnknownC = stream.Read1Byte(); UnknownC = stream.Read1Byte();
} }
internal override void Serialize(PacketStream stream) => throw new NotImplementedException(); internal override void Serialize(PacketStream stream) => throw new NotImplementedException();
} }
internal enum GameStartRoundType : byte
{
First = 1,
Next = 2
}
} }