Files
RAGECOOP-V/Server/Networking/Server.EntitySync.cs

74 lines
2.6 KiB
C#
Raw Normal View History

2022-09-08 12:41:56 -07:00
using Lidgren.Network;
2022-08-10 20:42:47 +08:00
using RageCoop.Core;
2022-10-23 19:02:39 +08:00
namespace RageCoop.Server;
public partial class Server
2022-08-10 20:42:47 +08:00
{
2022-10-23 19:02:39 +08:00
private void PedSync(Packets.PedSync packet, Client client)
2022-08-10 20:42:47 +08:00
{
2022-10-23 19:02:39 +08:00
QueueJob(() => Entities.Update(packet, client));
var isPlayer = packet.ID == client.Player.ID;
if (isPlayer) QueueJob(() => API.Events.InvokePlayerUpdate(client));
if (Settings.UseP2P) return;
foreach (var c in ClientsByNetHandle.Values)
2022-08-10 20:42:47 +08:00
{
2022-10-23 19:02:39 +08:00
// Don't send data back
if (c.NetHandle == client.NetHandle) continue;
2022-08-10 20:42:47 +08:00
2022-10-23 19:02:39 +08:00
// Check streaming distance
2022-08-10 20:42:47 +08:00
if (isPlayer)
{
2022-10-23 19:02:39 +08:00
if (Settings.PlayerStreamingDistance != -1 &&
packet.Position.DistanceTo(c.Player.Position) > Settings.PlayerStreamingDistance) continue;
2022-08-10 20:42:47 +08:00
}
2022-10-23 19:02:39 +08:00
else if (Settings.NpcStreamingDistance != -1 &&
packet.Position.DistanceTo(c.Player.Position) > Settings.NpcStreamingDistance)
2022-08-10 20:42:47 +08:00
{
2022-10-23 19:02:39 +08:00
continue;
2022-08-10 20:42:47 +08:00
}
2022-10-23 19:02:39 +08:00
var outgoingMessage = MainNetServer.CreateMessage();
packet.Pack(outgoingMessage);
MainNetServer.SendMessage(outgoingMessage, c.Connection, NetDeliveryMethod.UnreliableSequenced,
(byte)ConnectionChannel.PedSync);
2022-08-10 20:42:47 +08:00
}
2022-10-23 19:02:39 +08:00
}
2022-08-10 20:42:47 +08:00
2022-10-23 19:02:39 +08:00
private void VehicleSync(Packets.VehicleSync packet, Client client)
{
QueueJob(() => Entities.Update(packet, client));
var isPlayer = packet.ED.ID == client.Player?.LastVehicle?.ID;
2022-08-10 20:42:47 +08:00
2022-10-23 19:02:39 +08:00
if (Settings.UseP2P) return;
foreach (var c in ClientsByNetHandle.Values)
{
if (c.NetHandle == client.NetHandle) continue;
if (isPlayer)
2022-08-10 20:42:47 +08:00
{
2022-10-23 19:02:39 +08:00
// Player's vehicle
if (Settings.PlayerStreamingDistance != -1 &&
packet.ED.Position.DistanceTo(c.Player.Position) > Settings.PlayerStreamingDistance) continue;
2022-08-10 20:42:47 +08:00
}
2022-10-23 19:02:39 +08:00
else if (Settings.NpcStreamingDistance != -1 &&
packet.ED.Position.DistanceTo(c.Player.Position) > Settings.NpcStreamingDistance)
2022-10-23 19:02:39 +08:00
{
continue;
}
var outgoingMessage = MainNetServer.CreateMessage();
packet.Pack(outgoingMessage);
MainNetServer.SendMessage(outgoingMessage, c.Connection, NetDeliveryMethod.UnreliableSequenced,
(byte)ConnectionChannel.VehicleSync);
2022-08-10 20:42:47 +08:00
}
2022-10-23 19:02:39 +08:00
}
2022-08-10 20:42:47 +08:00
2022-10-23 19:02:39 +08:00
private void ProjectileSync(Packets.ProjectileSync packet, Client client)
{
if (Settings.UseP2P) return;
Forward(packet, client, ConnectionChannel.ProjectileSync);
2022-08-10 20:42:47 +08:00
}
2022-10-23 19:02:39 +08:00
}