sodoff-mmo/src/CommandHandlers/SetPositionVariablesHandler.cs
2023-09-05 19:02:38 +02:00

63 lines
2.2 KiB
C#

using sodoffmmo.Attributes;
using sodoffmmo.Core;
using sodoffmmo.Data;
namespace sodoffmmo.CommandHandlers;
[ExtensionCommandHandler("SPV")]
class SetPositionVariablesHandler : ICommandHandler {
Client client;
NetworkObject spvData;
public void Handle(Client client, NetworkObject receivedObject) {
this.client = client;
spvData = receivedObject;
UpdatePositionVariables();
SendSPVCommand();
}
private void UpdatePositionVariables() {
NetworkObject obj = spvData.Get<NetworkObject>("p");
float[] pos = obj.Get<float[]>("U");
client.PlayerData.R = obj.Get<float>("R");
client.PlayerData.P1 = pos[0];
client.PlayerData.P2 = pos[1];
client.PlayerData.P3 = pos[2];
client.PlayerData.R1 = pos[3];
client.PlayerData.R2 = pos[4];
client.PlayerData.R3 = pos[5];
client.PlayerData.Mx = obj.Get<float>("MX");
client.PlayerData.F = obj.Get<int>("F");
client.PlayerData.Mbf = obj.Get<int>("MBF");
}
private void SendSPVCommand() {
NetworkObject cmd = new();
NetworkObject obj = new();
NetworkArray container = new();
NetworkObject vars = new();
vars.Add("MX", (float)client.PlayerData.Mx);
vars.Add("ST", Runtime.CurrentRuntime);
vars.Add("NT", Runtime.CurrentRuntime.ToString());
vars.Add("t", (int)(Runtime.CurrentRuntime / 1000));
vars.Add("F", client.PlayerData.F);
vars.Add("MBF", client.PlayerData.Mbf);
vars.Add("R", client.PlayerData.R);
vars.Add("U", new float[] { (float)client.PlayerData.P1, (float)client.PlayerData.P2, (float)client.PlayerData.P3, (float)client.PlayerData.R1, (float)client.PlayerData.R2, (float)client.PlayerData.R3 });
vars.Add("MID", client.ClientID);
container.Add(vars);
obj.Add("arr", container);
cmd.Add("c", "SPV");
cmd.Add("p", obj);
NetworkPacket packet = NetworkObject.WrapObject(1, 13, cmd).Serialize();
lock (client.Room.roomLock) {
foreach (var roomClient in client.Room.Clients) {
if (roomClient != client)
roomClient.Send(packet);
}
}
}
}