mirror of
https://github.com/SoDOff-Project/sodoff-mmo.git
synced 2025-10-11 08:18:49 -07:00
add "JO" handler, fix "NT" value, support for WoJS
- add "JO" handler (private room join, like farm) - "NT" param should be Unix timestamp in milliseconds - "MBF" is not used by some games (e.g. WoJS)
This commit is contained in:
parent
a03f6b8dc0
commit
04b906b21c
17
src/CommandHandlers/JoinPrivateRoomHandler.cs
Normal file
17
src/CommandHandlers/JoinPrivateRoomHandler.cs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
using sodoffmmo.Attributes;
|
||||||
|
using sodoffmmo.Core;
|
||||||
|
using sodoffmmo.Data;
|
||||||
|
|
||||||
|
namespace sodoffmmo.CommandHandlers;
|
||||||
|
|
||||||
|
[ExtensionCommandHandler("JO")]
|
||||||
|
class JoinPrivateRoomHandler : ICommandHandler
|
||||||
|
{
|
||||||
|
public void Handle(Client client, NetworkObject receivedObject)
|
||||||
|
{
|
||||||
|
var p = receivedObject.Get<NetworkObject>("p");
|
||||||
|
string roomName = p.Get<string>("rn") + "_" + p.Get<string>("0");
|
||||||
|
Room room = Room.GetOrAdd(roomName, autoRemove: true);
|
||||||
|
client.SetRoom(room);
|
||||||
|
}
|
||||||
|
}
|
@ -43,7 +43,7 @@ class SetPositionVariablesHandler : ICommandHandler {
|
|||||||
NetworkObject vars = new();
|
NetworkObject vars = new();
|
||||||
vars.Add("MX", (float)client.PlayerData.Mx);
|
vars.Add("MX", (float)client.PlayerData.Mx);
|
||||||
vars.Add("ST", Runtime.CurrentRuntime);
|
vars.Add("ST", Runtime.CurrentRuntime);
|
||||||
vars.Add("NT", Runtime.CurrentRuntime.ToString());
|
vars.Add("NT", DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString());
|
||||||
vars.Add("t", (int)(Runtime.CurrentRuntime / 1000));
|
vars.Add("t", (int)(Runtime.CurrentRuntime / 1000));
|
||||||
vars.Add("F", client.PlayerData.F);
|
vars.Add("F", client.PlayerData.F);
|
||||||
vars.Add("MBF", client.PlayerData.Mbf);
|
vars.Add("MBF", client.PlayerData.Mbf);
|
||||||
|
@ -36,7 +36,7 @@ class SetUserVariablesHandler : ICommandHandler {
|
|||||||
client.PlayerData.M = suvData.Get<string>("M");
|
client.PlayerData.M = suvData.Get<string>("M");
|
||||||
client.PlayerData.L = suvData.Get<string>("L");
|
client.PlayerData.L = suvData.Get<string>("L");
|
||||||
client.PlayerData.Ra = suvData.Get<string>("RA");
|
client.PlayerData.Ra = suvData.Get<string>("RA");
|
||||||
string udt = suvData.Get<string>("UDT");
|
string? udt = suvData.Get<string>("UDT");
|
||||||
if (udt != null)
|
if (udt != null)
|
||||||
client.PlayerData.Udt = udt;
|
client.PlayerData.Udt = udt;
|
||||||
client.PlayerData.P1 = double.Parse(suvData.Get<string>("P1"), CultureInfo.InvariantCulture);
|
client.PlayerData.P1 = double.Parse(suvData.Get<string>("P1"), CultureInfo.InvariantCulture);
|
||||||
@ -46,7 +46,9 @@ class SetUserVariablesHandler : ICommandHandler {
|
|||||||
client.PlayerData.R2 = double.Parse(suvData.Get<string>("R2"), CultureInfo.InvariantCulture);
|
client.PlayerData.R2 = double.Parse(suvData.Get<string>("R2"), CultureInfo.InvariantCulture);
|
||||||
client.PlayerData.R3 = double.Parse(suvData.Get<string>("R3"), CultureInfo.InvariantCulture);
|
client.PlayerData.R3 = double.Parse(suvData.Get<string>("R3"), CultureInfo.InvariantCulture);
|
||||||
client.PlayerData.R = double.Parse(suvData.Get<string>("R"), CultureInfo.InvariantCulture);
|
client.PlayerData.R = double.Parse(suvData.Get<string>("R"), CultureInfo.InvariantCulture);
|
||||||
client.PlayerData.Mbf = int.Parse(suvData.Get<string>("MBF"));
|
string? mbf = suvData.Get<string>("MBF");
|
||||||
|
if (mbf != null)
|
||||||
|
client.PlayerData.Mbf = int.Parse(mbf);
|
||||||
client.PlayerData.F = int.Parse(suvData.Get<string>("F"));
|
client.PlayerData.F = int.Parse(suvData.Get<string>("F"));
|
||||||
client.PlayerData.J = suvData.Get<string>("J");
|
client.PlayerData.J = suvData.Get<string>("J");
|
||||||
client.PlayerData.Bu = suvData.Get<string>("BU");
|
client.PlayerData.Bu = suvData.Get<string>("BU");
|
||||||
|
@ -78,10 +78,10 @@ public class Room {
|
|||||||
|
|
||||||
public static Room Get(string name) => rooms[name];
|
public static Room Get(string name) => rooms[name];
|
||||||
|
|
||||||
public static Room GetOrAdd(string name) {
|
public static Room GetOrAdd(string name, bool autoRemove = false) {
|
||||||
lock(RoomsListLock) {
|
lock(RoomsListLock) {
|
||||||
if (!Room.Exists(name))
|
if (!Room.Exists(name))
|
||||||
return new Room(name);
|
return new Room(name, autoRemove: autoRemove);
|
||||||
return rooms[name];
|
return rooms[name];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ public class PlayerData {
|
|||||||
arr.Add((short)clientID);
|
arr.Add((short)clientID);
|
||||||
|
|
||||||
paramArr = new();
|
paramArr = new();
|
||||||
paramArr.Add(NetworkArray.Param("NT", (double)(Runtime.CurrentRuntime))); // network time
|
paramArr.Add(NetworkArray.Param("NT", (double)(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()))); // network time
|
||||||
paramArr.Add(NetworkArray.Param("t", (int)(Runtime.CurrentRuntime / 1000))); // timestamp
|
paramArr.Add(NetworkArray.Param("t", (int)(Runtime.CurrentRuntime / 1000))); // timestamp
|
||||||
|
|
||||||
paramArr.Add(NetworkArray.Param("UID", Uid));
|
paramArr.Add(NetworkArray.Param("UID", Uid));
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"MMOServer": {
|
"MMOServer": {
|
||||||
"// ListenIP": "Listening IP address for the asset server, default is '*' which represents all IPv4 and IPv6 addresses",
|
"// ListenIP": "Listening IP address for the MMO server, default is '*' which represents all IPv4 and IPv6 addresses",
|
||||||
"ListenIP": "*",
|
"ListenIP": "*",
|
||||||
|
|
||||||
"// Port": "Listening port number for the MMO server",
|
"// Port": "Listening port number for the MMO server",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user