mirror of
https://gitlab.com/Syroot/Worms.git
synced 2025-04-17 14:42:28 +03:00
Implement propret channel join.
This commit is contained in:
parent
629103fce5
commit
e4104b8309
@ -0,0 +1,79 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel;
|
||||||
|
|
||||||
|
namespace Syroot.Worms.Mgame.GameServer
|
||||||
|
{
|
||||||
|
internal partial class Client
|
||||||
|
{
|
||||||
|
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public void HandleWwpaChannelCmd(CmdQuery packet)
|
||||||
|
{
|
||||||
|
switch (packet.Data)
|
||||||
|
{
|
||||||
|
case StartSingleGameQueryData startSingleGameQuery:
|
||||||
|
HandleWwpaChannelCmdStartGame(startSingleGameQuery);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void HandleWwpaChannelDisconnect(DisconnectNotice packet) { }
|
||||||
|
|
||||||
|
public void HandleWwpaChannelLogin(LoginQuery packet)
|
||||||
|
{
|
||||||
|
SendPacket(new LoginReply { Result = LoginResult.Success });
|
||||||
|
//SendPacket(new NotChannelLoginReply());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void HandleWwpaChannelLogout(LogoutQuery packet)
|
||||||
|
{
|
||||||
|
SendPacket(new LogoutReply { Success = true });
|
||||||
|
}
|
||||||
|
|
||||||
|
public void HandleWwpaChannelUnknown11E(Unknown11EQuery packet)
|
||||||
|
{
|
||||||
|
SendPacket(new Unknown11FReply
|
||||||
|
{
|
||||||
|
UnknownA = 0x11111111,
|
||||||
|
UnknownB = "Hello",
|
||||||
|
UnknownC = 0x2222,
|
||||||
|
UnknownD = 0x3333
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void HandleWwpaChannelUnknown15A(Unknown15AQuery packet)
|
||||||
|
{
|
||||||
|
SendPacket(new Unknown15BReply
|
||||||
|
{
|
||||||
|
UnknownA = 0x1111,
|
||||||
|
UnknownB = 0x22222222,
|
||||||
|
UnknownC = "Test",
|
||||||
|
UnknownD = 0x3333,
|
||||||
|
UnknownE = 0x44444444,
|
||||||
|
UnknownF = 0x55,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---- METHODS (PRIVATE) --------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// ---- Cmds ----
|
||||||
|
|
||||||
|
private void HandleWwpaChannelCmdStartGame(StartSingleGameQueryData data)
|
||||||
|
{
|
||||||
|
SendPacket(new CmdReply(new StartSingleGameReplyData
|
||||||
|
{
|
||||||
|
Stuff = new List<StartSingleGameReplyStuff>
|
||||||
|
{
|
||||||
|
new StartSingleGameReplyStuff
|
||||||
|
{
|
||||||
|
UnknownA = 1,
|
||||||
|
UnknownB = 2,
|
||||||
|
UnknownC = 3,
|
||||||
|
UnknownD = 4,
|
||||||
|
UnknownE = 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua;
|
using Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Server;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer
|
namespace Syroot.Worms.Mgame.GameServer
|
||||||
{
|
{
|
||||||
@ -7,17 +7,7 @@ namespace Syroot.Worms.Mgame.GameServer
|
|||||||
{
|
{
|
||||||
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
||||||
|
|
||||||
public void HandleWwpaChannelCmd(ChannelCmdQuery packet)
|
public void HandleWwpaServerChannelList(ChannelListQuery packet)
|
||||||
{
|
|
||||||
switch (packet.Data)
|
|
||||||
{
|
|
||||||
case StartSingleGameQueryData startSingleGameQuery:
|
|
||||||
HandleWwpaStartGameQuery(startSingleGameQuery);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void HandleWwpaChannelList(ChannelListQuery packet)
|
|
||||||
{
|
{
|
||||||
SendPacket(new ChannelListReply
|
SendPacket(new ChannelListReply
|
||||||
{
|
{
|
||||||
@ -90,30 +80,20 @@ namespace Syroot.Worms.Mgame.GameServer
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HandleWwpaChannelLogin(ChannelLoginQuery packet)
|
public void HandleWwpaServerConnect(ConnectQuery packet)
|
||||||
{
|
|
||||||
SendPacket(new ChannelLoginReply());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void HandleWwpaConnect(ConnectQuery packet)
|
|
||||||
{
|
{
|
||||||
// Client fails to detect reply at rare times due to unknown reasons.
|
// Client fails to detect reply at rare times due to unknown reasons.
|
||||||
SendPacket(new ConnectReply { ServerVersion = _server.Config.Version });
|
SendPacket(new ConnectReply { ServerVersion = _server.Config.Version });
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HandleWwpaDisconnect(DisconnectNotice packet) { }
|
public void HandleWwpaServerDisconnect(DisconnectNotice packet) { }
|
||||||
|
|
||||||
public void HandleWwpaLogin(LoginQuery packet)
|
public void HandleWwpaServerLogin(LoginQuery packet)
|
||||||
{
|
{
|
||||||
SendPacket(new LoginReply { Result = LoginResult.Success });
|
SendPacket(new LoginReply { Result = LoginResult.Success });
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HandleWwpaLogoutQuery(LogoutQuery packet)
|
public void HandleWwpaServerOptionsQuery(OptionsQuery packet)
|
||||||
{
|
|
||||||
SendPacket(new LogoutReply { Success = true });
|
|
||||||
}
|
|
||||||
|
|
||||||
public void HandleWwpaOptionsQuery(OptionsQuery packet)
|
|
||||||
{
|
{
|
||||||
SendPacket(new OptionsReply
|
SendPacket(new OptionsReply
|
||||||
{
|
{
|
||||||
@ -123,31 +103,9 @@ namespace Syroot.Worms.Mgame.GameServer
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HandleWwpaOptionsSaveQuery(OptionsSaveQuery packet)
|
public void HandleWwpaServerOptionsSaveQuery(OptionsSaveQuery packet)
|
||||||
{
|
{
|
||||||
SendPacket(new OptionsSaveReply { Success = true });
|
SendPacket(new OptionsSaveReply { Success = true });
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---- METHODS (PRIVATE) --------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// ---- ChannelCmds ----
|
|
||||||
|
|
||||||
private void HandleWwpaStartGameQuery(StartSingleGameQueryData data)
|
|
||||||
{
|
|
||||||
SendPacket(new ChannelCmdReply(new StartSingleGameReplyData
|
|
||||||
{
|
|
||||||
Stuff = new List<StartSingleGameReplyStuff>
|
|
||||||
{
|
|
||||||
new StartSingleGameReplyStuff
|
|
||||||
{
|
|
||||||
UnknownA = 1,
|
|
||||||
UnknownB = 2,
|
|
||||||
UnknownC = 3,
|
|
||||||
UnknownD = 4,
|
|
||||||
UnknownE = 5
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,6 @@
|
|||||||
using System.Net.Sockets;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net.Sockets;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Syroot.Worms.Mgame.GameServer.Core;
|
using Syroot.Worms.Mgame.GameServer.Core;
|
||||||
using Syroot.Worms.Mgame.GameServer.Packets;
|
using Syroot.Worms.Mgame.GameServer.Packets;
|
||||||
@ -44,6 +46,9 @@ namespace Syroot.Worms.Mgame.GameServer
|
|||||||
// ---- METHODS (PRIVATE) --------------------------------------------------------------------------------------
|
// ---- METHODS (PRIVATE) --------------------------------------------------------------------------------------
|
||||||
|
|
||||||
private string FormatPacket(IPacket packet, string direction)
|
private string FormatPacket(IPacket packet, string direction)
|
||||||
=> $"{TcpClient.Client.RemoteEndPoint} {direction} {packet.GetType().Name}{ObjectDumper.Dump(packet)}";
|
{
|
||||||
|
string packetName = String.Join(' ', packet.GetType().FullName.Split('.').TakeLast(2));
|
||||||
|
return $"{TcpClient.Client.RemoteEndPoint} {direction} {packetName}{ObjectDumper.Dump(packet)}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,10 +4,14 @@ namespace Syroot.Worms.Mgame.GameServer
|
|||||||
{
|
{
|
||||||
internal class Config
|
internal class Config
|
||||||
{
|
{
|
||||||
|
// ---- FIELDS -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
private IPAddress _ipAddress;
|
||||||
|
|
||||||
// ---- PROPERTIES ---------------------------------------------------------------------------------------------
|
// ---- PROPERTIES ---------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the external IP sent to clients to connect to.
|
/// Gets or sets the IP sent to clients to connect to. Defaults to retrieving the external address.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string IP { get; set; }
|
public string IP { get; set; }
|
||||||
|
|
||||||
@ -22,7 +26,20 @@ namespace Syroot.Worms.Mgame.GameServer
|
|||||||
|
|
||||||
public int SendDelay { get; set; }
|
public int SendDelay { get; set; }
|
||||||
|
|
||||||
internal IPAddress IPAddress => IPAddress.Parse(IP);
|
internal IPAddress IPAddress
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
// Retrieve external IP if not yet done and given IP is invalid.
|
||||||
|
if (_ipAddress == null && (IP == null || !IPAddress.TryParse(IP, out _ipAddress)))
|
||||||
|
{
|
||||||
|
using (WebClient webClient = new WebClient())
|
||||||
|
_ipAddress = IPAddress.Parse(webClient.DownloadString("https://ip.syroot.com"));
|
||||||
|
}
|
||||||
|
return _ipAddress;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
internal IPEndPoint EndPoint => new IPEndPoint(IPAddress, Port);
|
internal IPEndPoint EndPoint => new IPEndPoint(IPAddress, Port);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,36 +4,36 @@ using System.Linq;
|
|||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
using Syroot.Worms.Mgame.GameServer.Core.IO;
|
using Syroot.Worms.Mgame.GameServer.Core.IO;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
{
|
{
|
||||||
// TODO: Ugly, but requires bigger redesign to allow a second identifier in the packets.
|
// TODO: Ugly, but requires bigger redesign to allow a second identifier in the packets.
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the base class for <see cref="ChannelCmdQuery"/> and <see cref="ChannelCmdReply"/> packets.
|
/// Represents the base class for <see cref="CmdQuery"/> and <see cref="CmdReply"/> packets.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal abstract class ChannelCmdPacket : IPacket
|
internal abstract class CmdPacket : IPacket
|
||||||
{
|
{
|
||||||
// ---- PROPERTIES ---------------------------------------------------------------------------------------------
|
// ---- PROPERTIES ---------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
public IChannelCmdData Data { get; set; }
|
public ICmdData Data { get; set; }
|
||||||
|
|
||||||
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
||||||
|
|
||||||
public void Load(ref SpanReader reader)
|
public void Load(ref SpanReader reader)
|
||||||
{
|
{
|
||||||
ChannelCmd cmd = reader.ReadEnum<ChannelCmd>();
|
Cmd cmd = reader.ReadEnum<Cmd>();
|
||||||
Data = GetDataClasses().TryGetValue(cmd, out Type type)
|
Data = GetDataClasses().TryGetValue(cmd, out Type type)
|
||||||
? (IChannelCmdData)Activator.CreateInstance(type)
|
? (ICmdData)Activator.CreateInstance(type)
|
||||||
: new RawChannelCmdData(cmd);
|
: new RawCmdData(cmd);
|
||||||
Data.Load(ref reader);
|
Data.Load(ref reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Save(ref SpanWriter writer)
|
public void Save(ref SpanWriter writer)
|
||||||
{
|
{
|
||||||
ChannelCmd cmd;
|
Cmd cmd;
|
||||||
switch (Data)
|
switch (Data)
|
||||||
{
|
{
|
||||||
case RawChannelCmdData rawChannelCmdData:
|
case RawCmdData rawChannelCmdData:
|
||||||
cmd = rawChannelCmdData.Cmd;
|
cmd = rawChannelCmdData.Cmd;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -47,25 +47,25 @@ namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
|||||||
|
|
||||||
// ---- METHODS (PROTECTED) ------------------------------------------------------------------------------------
|
// ---- METHODS (PROTECTED) ------------------------------------------------------------------------------------
|
||||||
|
|
||||||
protected abstract IDictionary<ChannelCmd, Type> GetDataClasses();
|
protected abstract IDictionary<Cmd, Type> GetDataClasses();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal enum ChannelCmd : int
|
internal enum Cmd : int
|
||||||
{
|
{
|
||||||
StartSingleGameQuery = 5
|
StartSingleGameQuery = 5
|
||||||
}
|
}
|
||||||
|
|
||||||
internal interface IChannelCmdData
|
internal interface ICmdData
|
||||||
{
|
{
|
||||||
void Load(ref SpanReader reader);
|
void Load(ref SpanReader reader);
|
||||||
void Save(ref SpanWriter writer);
|
void Save(ref SpanWriter writer);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class RawChannelCmdData : IChannelCmdData
|
internal class RawCmdData : ICmdData
|
||||||
{
|
{
|
||||||
public RawChannelCmdData(ChannelCmd cmd) => Cmd = cmd;
|
public RawCmdData(Cmd cmd) => Cmd = cmd;
|
||||||
|
|
||||||
internal ChannelCmd Cmd { get; }
|
internal Cmd Cmd { get; }
|
||||||
internal byte[] Data { get; set; }
|
internal byte[] Data { get; set; }
|
||||||
|
|
||||||
public void Load(ref SpanReader reader) => Data = reader.ReadToEnd();
|
public void Load(ref SpanReader reader) => Data = reader.ReadToEnd();
|
@ -0,0 +1,23 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents the client request for a <see cref="CmdReply"/>.
|
||||||
|
/// </summary>
|
||||||
|
[Packet(PacketFormat.Wwpa, 0x10A)]
|
||||||
|
internal class CmdQuery : CmdPacket
|
||||||
|
{
|
||||||
|
// ---- FIELDS -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
private static readonly Dictionary<Cmd, Type> _queryClasses = new Dictionary<Cmd, Type>
|
||||||
|
{
|
||||||
|
[Cmd.StartSingleGameQuery] = typeof(StartSingleGameQueryData)
|
||||||
|
};
|
||||||
|
|
||||||
|
// ---- METHODS (PROTECTED) ------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
protected override IDictionary<Cmd, Type> GetDataClasses() => _queryClasses;
|
||||||
|
}
|
||||||
|
}
|
@ -1,30 +1,30 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the server response to a <see cref="ChannelCmdQuery"/>.
|
/// Represents the server response to a <see cref="CmdQuery"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Packet(PacketFormat.Wwpa, 0x10B)]
|
[Packet(PacketFormat.Wwpa, 0x10B)]
|
||||||
internal class ChannelCmdReply : ChannelCmdPacket
|
internal class CmdReply : CmdPacket
|
||||||
{
|
{
|
||||||
// ---- FIELDS -------------------------------------------------------------------------------------------------
|
// ---- FIELDS -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
private static readonly Dictionary<ChannelCmd, Type> _replyClasses = new Dictionary<ChannelCmd, Type>
|
private static readonly Dictionary<Cmd, Type> _replyClasses = new Dictionary<Cmd, Type>
|
||||||
{
|
{
|
||||||
[ChannelCmd.StartSingleGameQuery] = typeof(StartSingleGameReplyData)
|
[Cmd.StartSingleGameQuery] = typeof(StartSingleGameReplyData)
|
||||||
};
|
};
|
||||||
|
|
||||||
// ---- CONSTRUCTORS & DESTRUCTOR ------------------------------------------------------------------------------
|
// ---- CONSTRUCTORS & DESTRUCTOR ------------------------------------------------------------------------------
|
||||||
|
|
||||||
internal ChannelCmdReply(IChannelCmdData data)
|
internal CmdReply(ICmdData data)
|
||||||
{
|
{
|
||||||
Data = data;
|
Data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---- METHODS (PROTECTED) ------------------------------------------------------------------------------------
|
// ---- METHODS (PROTECTED) ------------------------------------------------------------------------------------
|
||||||
|
|
||||||
protected override IDictionary<ChannelCmd, Type> GetDataClasses() => _replyClasses;
|
protected override IDictionary<Cmd, Type> GetDataClasses() => _replyClasses;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the client notice of disconnecting.
|
/// Represents the client notice of disconnecting.
|
@ -5,13 +5,13 @@ using Syroot.BinaryData.Memory;
|
|||||||
using Syroot.Worms.Mgame.GameServer.Core.IO;
|
using Syroot.Worms.Mgame.GameServer.Core.IO;
|
||||||
using Syroot.Worms.Mgame.GameServer.Packets.Data;
|
using Syroot.Worms.Mgame.GameServer.Packets.Data;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the client request for a <see cref="ChannelConnectReply"/>.
|
/// Represents the client request for a <see cref="LoginReply"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Packet(PacketFormat.Wwpa, 0x101)]
|
[Packet(PacketFormat.Wwpa, 0x101)]
|
||||||
internal class ChannelLoginQuery : IPacket
|
internal class LoginQuery : IPacket
|
||||||
{
|
{
|
||||||
// ---- PROPERTIES ---------------------------------------------------------------------------------------------
|
// ---- PROPERTIES ---------------------------------------------------------------------------------------------
|
||||||
|
|
@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents the server response to a <see cref="LoginQuery"/>.
|
||||||
|
/// </summary>
|
||||||
|
[Packet(PacketFormat.Wwpa, 0x102)]
|
||||||
|
internal class LoginReply : IPacket
|
||||||
|
{
|
||||||
|
// ---- PROPERTIES ---------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public LoginResult Result { get; set; }
|
||||||
|
|
||||||
|
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public void Load(ref SpanReader reader) => throw new NotImplementedException();
|
||||||
|
|
||||||
|
public void Save(ref SpanWriter writer)
|
||||||
|
{
|
||||||
|
writer.WriteEnumSafe(Result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal enum LoginResult : int
|
||||||
|
{
|
||||||
|
Success = 0,
|
||||||
|
ChannelFull = 10,
|
||||||
|
No2PSupport = 11,
|
||||||
|
InvalidCredentials = 12,
|
||||||
|
IDAlreadyTaken = 13,
|
||||||
|
IDDoesNotExist = 14,
|
||||||
|
PasswordDoesNotMatch = 15,
|
||||||
|
Fail = 99
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the client request for a <see cref="LogoutReply"/>.
|
/// Represents the client request for a <see cref="LogoutReply"/>.
|
@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the server response to a <see cref="LogoutQuery"/>.
|
/// Represents the server response to a <see cref="LogoutQuery"/>.
|
@ -0,0 +1,19 @@
|
|||||||
|
using System;
|
||||||
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Invalid description: "Represents the server response to a <see cref="LoginQuery"/>."
|
||||||
|
/// </summary>
|
||||||
|
[Obsolete("While this packet exists, it is currently unclear where it is used.")]
|
||||||
|
[Packet(PacketFormat.Wwpa, 0x145)]
|
||||||
|
internal class NotLoginReply : IPacket
|
||||||
|
{
|
||||||
|
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public void Load(ref SpanReader reader) { }
|
||||||
|
|
||||||
|
public void Save(ref SpanWriter writer) { }
|
||||||
|
}
|
||||||
|
}
|
@ -1,11 +1,11 @@
|
|||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the <see cref="ChannelCmdQuery"/> client request for a <see cref="StartSingleGameReplyData"/>.
|
/// Represents the <see cref="ChannelCmdQuery"/> client request for a <see cref="StartSingleGameReplyData"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal class StartSingleGameQueryData : IChannelCmdData
|
internal class StartSingleGameQueryData : ICmdData
|
||||||
{
|
{
|
||||||
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
||||||
|
|
@ -2,12 +2,12 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the <see cref="ChannelCmdQuery"/> server response to a <see cref="StartSingleGameQueryData"/>.
|
/// Represents the <see cref="ChannelCmdQuery"/> server response to a <see cref="StartSingleGameQueryData"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal class StartSingleGameReplyData : IChannelCmdData
|
internal class StartSingleGameReplyData : ICmdData
|
||||||
{
|
{
|
||||||
// ---- PROPERTIES ---------------------------------------------------------------------------------------------
|
// ---- PROPERTIES ---------------------------------------------------------------------------------------------
|
||||||
|
|
@ -0,0 +1,17 @@
|
|||||||
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents the client request for a <see cref="Unknown11FReply"/>.
|
||||||
|
/// </summary>
|
||||||
|
[Packet(PacketFormat.Wwpa, 0x11E)]
|
||||||
|
internal class Unknown11EQuery : IPacket
|
||||||
|
{
|
||||||
|
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public void Load(ref SpanReader reader) { }
|
||||||
|
|
||||||
|
public void Save(ref SpanWriter writer) { }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
using System;
|
||||||
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents the server response to a <see cref="Unknown11EQuery"/>.
|
||||||
|
/// </summary>
|
||||||
|
[Packet(PacketFormat.Wwpa, 0x11F)]
|
||||||
|
internal class Unknown11FReply : IPacket
|
||||||
|
{
|
||||||
|
// ---- PROPERTIES ---------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public int UnknownA { get; set; }
|
||||||
|
|
||||||
|
public string UnknownB { get; set; }
|
||||||
|
|
||||||
|
public ushort UnknownC { get; set; }
|
||||||
|
|
||||||
|
public ushort UnknownD { get; set; }
|
||||||
|
|
||||||
|
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public void Load(ref SpanReader reader) => throw new NotImplementedException();
|
||||||
|
|
||||||
|
public void Save(ref SpanWriter writer)
|
||||||
|
{
|
||||||
|
writer.WriteInt32(UnknownA);
|
||||||
|
writer.WriteString2(UnknownB);
|
||||||
|
writer.WriteUInt16(UnknownC);
|
||||||
|
writer.WriteUInt16(UnknownD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents the client request for a <see cref="Unknown15BReply"/>.
|
||||||
|
/// </summary>
|
||||||
|
[Packet(PacketFormat.Wwpa, 0x15A)]
|
||||||
|
internal class Unknown15AQuery : IPacket
|
||||||
|
{
|
||||||
|
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public void Load(ref SpanReader reader) { }
|
||||||
|
|
||||||
|
public void Save(ref SpanWriter writer) { }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
using System;
|
||||||
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Channel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents the server response to a <see cref="Unknown15AQuery"/>.
|
||||||
|
/// </summary>
|
||||||
|
[Packet(PacketFormat.Wwpa, 0x15B)]
|
||||||
|
internal class Unknown15BReply : IPacket
|
||||||
|
{
|
||||||
|
// ---- PROPERTIES ---------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public ushort UnknownA { get; set; }
|
||||||
|
|
||||||
|
public int UnknownB { get; set; } // unused?
|
||||||
|
|
||||||
|
public string UnknownC { get; set; }
|
||||||
|
|
||||||
|
public ushort UnknownD { get; set; } // x - 1 / 5, unused?
|
||||||
|
|
||||||
|
public int UnknownE { get; set; } // unused?
|
||||||
|
|
||||||
|
public byte UnknownF { get; set; } // unused?
|
||||||
|
|
||||||
|
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public void Load(ref SpanReader reader) => throw new NotImplementedException();
|
||||||
|
|
||||||
|
public void Save(ref SpanWriter writer)
|
||||||
|
{
|
||||||
|
writer.WriteUInt16(UnknownA);
|
||||||
|
writer.WriteInt32(UnknownB);
|
||||||
|
writer.WriteString2(UnknownC);
|
||||||
|
writer.WriteUInt16(UnknownD);
|
||||||
|
writer.WriteInt32(UnknownE);
|
||||||
|
writer.WriteByte(UnknownF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,23 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Represents the client request for a <see cref="ChannelCmdReply"/>.
|
|
||||||
/// </summary>
|
|
||||||
[Packet(PacketFormat.Wwpa, 0x10A)]
|
|
||||||
internal class ChannelCmdQuery : ChannelCmdPacket
|
|
||||||
{
|
|
||||||
// ---- FIELDS -------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
private static readonly Dictionary<ChannelCmd, Type> _queryClasses = new Dictionary<ChannelCmd, Type>
|
|
||||||
{
|
|
||||||
[ChannelCmd.StartSingleGameQuery] = typeof(StartSingleGameQueryData)
|
|
||||||
};
|
|
||||||
|
|
||||||
// ---- METHODS (PROTECTED) ------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
protected override IDictionary<ChannelCmd, Type> GetDataClasses() => _queryClasses;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Server
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the client request for a <see cref="ChannelListReply"/>.
|
/// Represents the client request for a <see cref="ChannelListReply"/>.
|
@ -5,7 +5,7 @@ using System.Net;
|
|||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
using Syroot.Worms.Mgame.GameServer.Core.IO;
|
using Syroot.Worms.Mgame.GameServer.Core.IO;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Server
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the server reply to a <see cref="ChannelListQuery"/>.
|
/// Represents the server reply to a <see cref="ChannelListQuery"/>.
|
@ -1,6 +1,6 @@
|
|||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Server
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the client request for a <see cref="ConnectReply"/>.
|
/// Represents the client request for a <see cref="ConnectReply"/>.
|
@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Server
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the server response to a <see cref="ConnectQuery"/>.
|
/// Represents the server response to a <see cref="ConnectQuery"/>.
|
@ -1,12 +1,12 @@
|
|||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Server
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the server response to a <see cref="ChannelConnectQuery"/>.
|
/// Represents the client notice of disconnecting.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Packet(PacketFormat.Wwpa, 0x145)]
|
[Packet(PacketFormat.Wwpa, 0x801B)]
|
||||||
internal class ChannelLoginReply : IPacket
|
internal class DisconnectNotice : IPacket
|
||||||
{
|
{
|
||||||
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
|
||||||
|
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
|||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
using Syroot.Worms.Mgame.GameServer.Packets.Data;
|
using Syroot.Worms.Mgame.GameServer.Packets.Data;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Server
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the client request for a <see cref="LoginReply"/>.
|
/// Represents the client request for a <see cref="LoginReply"/>.
|
@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Server
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the server response to a <see cref="LoginQuery"/>.
|
/// Represents the server response to a <see cref="LoginQuery"/>.
|
@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Server
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the client request for an <see cref="OptionsReply"/>.
|
/// Represents the client request for an <see cref="OptionsReply"/>.
|
@ -2,7 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Server
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the server response to a <see cref="OptionsQuery"/>.
|
/// Represents the server response to a <see cref="OptionsQuery"/>.
|
@ -2,7 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Server
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the client request for an <see cref="OptionsSaveReply"/>.
|
/// Represents the client request for an <see cref="OptionsSaveReply"/>.
|
@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using Syroot.BinaryData.Memory;
|
using Syroot.BinaryData.Memory;
|
||||||
|
|
||||||
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua
|
namespace Syroot.Worms.Mgame.GameServer.Packets.WorldPartyAqua.Server
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the server response to an <see cref="OptionsSaveQuery"/>.
|
/// Represents the server response to an <see cref="OptionsSaveQuery"/>.
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
// Server settings
|
// Server settings
|
||||||
"IP": "89.244.195.103", // external IP sent to clients to connect to
|
"IP": "external", // external IP sent to clients to connect to. Specify invalid IP to retrieve external one
|
||||||
"Port": 17022,
|
"Port": 17022,
|
||||||
"Name": "Mgame Worms Private Server",
|
"Name": "Mgame Worms Private Server",
|
||||||
"Region": "Global",
|
"Region": "Global",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user