2021-07-07 13:36:25 +02:00
|
|
|
|
using System;
|
2021-08-21 16:52:17 +02:00
|
|
|
|
using System.Collections.Generic;
|
2021-07-07 13:36:25 +02:00
|
|
|
|
|
|
|
|
|
using CoopClient.Entities;
|
|
|
|
|
|
|
|
|
|
using Lidgren.Network;
|
|
|
|
|
|
|
|
|
|
using GTA;
|
|
|
|
|
using GTA.Native;
|
|
|
|
|
|
|
|
|
|
namespace CoopClient
|
|
|
|
|
{
|
2021-12-03 20:30:00 +01:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Don't use it!
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class Networking
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
2021-12-03 20:30:00 +01:00
|
|
|
|
internal NetClient Client;
|
|
|
|
|
internal float Latency;
|
2021-07-07 13:36:25 +02:00
|
|
|
|
|
2021-12-03 20:30:00 +01:00
|
|
|
|
internal bool ShowNetworkInfo = false;
|
2021-08-18 11:47:59 +02:00
|
|
|
|
|
2021-12-03 20:30:00 +01:00
|
|
|
|
internal int BytesReceived = 0;
|
|
|
|
|
internal int BytesSend = 0;
|
2021-08-18 11:47:59 +02:00
|
|
|
|
|
2021-12-03 20:30:00 +01:00
|
|
|
|
internal void DisConnectFromServer(string address)
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
|
|
|
|
if (IsOnServer())
|
|
|
|
|
{
|
2021-07-07 18:05:08 +02:00
|
|
|
|
Client.Disconnect("Bye!");
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// 6d4ec318f1c43bd62fe13d5a7ab28650 = GTACOOP:R
|
|
|
|
|
NetPeerConfiguration config = new NetPeerConfiguration("6d4ec318f1c43bd62fe13d5a7ab28650")
|
|
|
|
|
{
|
|
|
|
|
AutoFlushSendQueue = false
|
|
|
|
|
};
|
|
|
|
|
|
2021-08-16 12:31:49 +02:00
|
|
|
|
config.EnableMessageType(NetIncomingMessageType.ConnectionLatencyUpdated);
|
|
|
|
|
|
2021-07-07 13:36:25 +02:00
|
|
|
|
Client = new NetClient(config);
|
|
|
|
|
|
|
|
|
|
Client.Start();
|
|
|
|
|
|
2021-12-07 08:18:29 +01:00
|
|
|
|
string[] ip = new string[2];
|
|
|
|
|
|
|
|
|
|
int idx = address.LastIndexOf(':');
|
|
|
|
|
if (idx != -1)
|
|
|
|
|
{
|
|
|
|
|
ip[0] = address.Substring(0, idx);
|
|
|
|
|
ip[1] = address.Substring(idx + 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ip.Length != 2)
|
2021-11-19 17:05:57 -07:00
|
|
|
|
{
|
|
|
|
|
throw new Exception("Malformed URL");
|
|
|
|
|
}
|
2021-07-07 13:36:25 +02:00
|
|
|
|
|
|
|
|
|
// Send HandshakePacket
|
|
|
|
|
NetOutgoingMessage outgoingMessage = Client.CreateMessage();
|
|
|
|
|
new HandshakePacket()
|
|
|
|
|
{
|
2021-12-14 22:39:15 +01:00
|
|
|
|
NetHandle = 0,
|
2021-07-07 13:36:25 +02:00
|
|
|
|
Username = Main.MainSettings.Username,
|
2021-09-28 16:51:16 +02:00
|
|
|
|
ModVersion = Main.CurrentVersion,
|
2021-12-23 22:03:01 +01:00
|
|
|
|
NPCsAllowed = false
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}.PacketToNetOutGoingMessage(outgoingMessage);
|
|
|
|
|
|
|
|
|
|
Client.Connect(ip[0], short.Parse(ip[1]), outgoingMessage);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-03 20:30:00 +01:00
|
|
|
|
internal bool IsOnServer()
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
|
|
|
|
return Client?.ConnectionStatus == NetConnectionStatus.Connected;
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-03 20:30:00 +01:00
|
|
|
|
internal void ReceiveMessages()
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
|
|
|
|
if (Client == null)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
NetIncomingMessage message;
|
|
|
|
|
|
|
|
|
|
while ((message = Client.ReadMessage()) != null)
|
|
|
|
|
{
|
2021-08-18 11:47:59 +02:00
|
|
|
|
BytesReceived += message.LengthBytes;
|
|
|
|
|
|
2021-07-07 13:36:25 +02:00
|
|
|
|
switch (message.MessageType)
|
|
|
|
|
{
|
|
|
|
|
case NetIncomingMessageType.StatusChanged:
|
|
|
|
|
NetConnectionStatus status = (NetConnectionStatus)message.ReadByte();
|
|
|
|
|
|
|
|
|
|
string reason = message.ReadString();
|
|
|
|
|
|
|
|
|
|
switch (status)
|
|
|
|
|
{
|
|
|
|
|
case NetConnectionStatus.InitiatedConnect:
|
2021-09-26 20:52:23 -06:00
|
|
|
|
#if !NON_INTERACTIVE
|
|
|
|
|
Main.MainMenu.InitiateConnectionMenuSetting();
|
|
|
|
|
#endif
|
2021-07-07 13:36:25 +02:00
|
|
|
|
GTA.UI.Notification.Show("~y~Trying to connect...");
|
|
|
|
|
break;
|
|
|
|
|
case NetConnectionStatus.Connected:
|
|
|
|
|
if (message.SenderConnection.RemoteHailMessage.ReadByte() != (byte)PacketTypes.HandshakePacket)
|
|
|
|
|
{
|
|
|
|
|
Client.Disconnect("Wrong packet!");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
int len = message.SenderConnection.RemoteHailMessage.ReadInt32();
|
|
|
|
|
byte[] data = message.SenderConnection.RemoteHailMessage.ReadBytes(len);
|
|
|
|
|
|
|
|
|
|
HandshakePacket handshakePacket = new HandshakePacket();
|
|
|
|
|
handshakePacket.NetIncomingMessageToPacket(data);
|
2021-07-07 13:36:25 +02:00
|
|
|
|
|
2021-12-14 22:39:15 +01:00
|
|
|
|
Main.LocalNetHandle = handshakePacket.NetHandle;
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Main.NPCsAllowed = handshakePacket.NPCsAllowed;
|
2021-07-07 13:36:25 +02:00
|
|
|
|
|
|
|
|
|
Main.MainChat.Init();
|
|
|
|
|
|
2021-09-26 20:52:23 -06:00
|
|
|
|
#if !NON_INTERACTIVE
|
|
|
|
|
Main.MainMenu.ConnectedMenuSetting();
|
|
|
|
|
#endif
|
2021-09-27 22:40:18 +02:00
|
|
|
|
|
2021-11-27 22:44:00 +01:00
|
|
|
|
COOPAPI.Connected();
|
2021-09-27 22:40:18 +02:00
|
|
|
|
GTA.UI.Notification.Show("~g~Connected!");
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case NetConnectionStatus.Disconnected:
|
|
|
|
|
// Reset all values
|
2021-08-16 12:31:49 +02:00
|
|
|
|
LastPlayerFullSync = 0;
|
2021-07-07 13:36:25 +02:00
|
|
|
|
|
2021-12-14 22:39:15 +01:00
|
|
|
|
Main.NPCsAllowed = false;
|
2021-07-07 13:36:25 +02:00
|
|
|
|
|
|
|
|
|
if (Main.MainChat.Focused)
|
|
|
|
|
{
|
|
|
|
|
Main.MainChat.Focused = false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-08-06 12:31:25 +02:00
|
|
|
|
Main.CleanUp();
|
2021-11-28 22:57:39 +01:00
|
|
|
|
|
2021-09-26 20:52:23 -06:00
|
|
|
|
#if !NON_INTERACTIVE
|
|
|
|
|
Main.MainMenu.DisconnectedMenuSetting();
|
|
|
|
|
#endif
|
2021-09-27 22:40:18 +02:00
|
|
|
|
|
2021-11-27 22:44:00 +01:00
|
|
|
|
COOPAPI.Disconnected(reason);
|
2021-09-27 22:40:18 +02:00
|
|
|
|
GTA.UI.Notification.Show("~r~Disconnected: " + reason);
|
2021-07-07 13:36:25 +02:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case NetIncomingMessageType.Data:
|
|
|
|
|
byte packetType = message.ReadByte();
|
|
|
|
|
|
|
|
|
|
switch (packetType)
|
|
|
|
|
{
|
|
|
|
|
case (byte)PacketTypes.PlayerConnectPacket:
|
2021-12-23 22:03:01 +01:00
|
|
|
|
{
|
|
|
|
|
int len = message.ReadInt32();
|
|
|
|
|
byte[] data = message.ReadBytes(len);
|
|
|
|
|
|
|
|
|
|
PlayerConnectPacket packet = new PlayerConnectPacket();
|
|
|
|
|
packet.NetIncomingMessageToPacket(data);
|
|
|
|
|
|
|
|
|
|
PlayerConnect(packet);
|
|
|
|
|
}
|
2021-07-07 13:36:25 +02:00
|
|
|
|
break;
|
|
|
|
|
case (byte)PacketTypes.PlayerDisconnectPacket:
|
2021-12-23 22:03:01 +01:00
|
|
|
|
{
|
|
|
|
|
int len = message.ReadInt32();
|
|
|
|
|
byte[] data = message.ReadBytes(len);
|
|
|
|
|
|
|
|
|
|
PlayerDisconnectPacket packet = new PlayerDisconnectPacket();
|
|
|
|
|
packet.NetIncomingMessageToPacket(data);
|
|
|
|
|
|
|
|
|
|
PlayerDisconnect(packet);
|
|
|
|
|
}
|
2021-07-07 13:36:25 +02:00
|
|
|
|
break;
|
|
|
|
|
case (byte)PacketTypes.FullSyncPlayerPacket:
|
2021-12-23 22:03:01 +01:00
|
|
|
|
{
|
|
|
|
|
int len = message.ReadInt32();
|
|
|
|
|
byte[] data = message.ReadBytes(len);
|
|
|
|
|
|
|
|
|
|
FullSyncPlayerPacket packet = new FullSyncPlayerPacket();
|
|
|
|
|
packet.NetIncomingMessageToPacket(data);
|
|
|
|
|
|
|
|
|
|
FullSyncPlayer(packet);
|
|
|
|
|
}
|
2021-07-07 13:36:25 +02:00
|
|
|
|
break;
|
2021-07-12 05:00:48 +02:00
|
|
|
|
case (byte)PacketTypes.FullSyncPlayerVehPacket:
|
2021-12-23 22:03:01 +01:00
|
|
|
|
{
|
|
|
|
|
int len = message.ReadInt32();
|
|
|
|
|
byte[] data = message.ReadBytes(len);
|
|
|
|
|
|
|
|
|
|
FullSyncPlayerVehPacket packet = new FullSyncPlayerVehPacket();
|
|
|
|
|
packet.NetIncomingMessageToPacket(data);
|
|
|
|
|
|
|
|
|
|
FullSyncPlayerVeh(packet);
|
|
|
|
|
}
|
2021-07-07 13:36:25 +02:00
|
|
|
|
break;
|
|
|
|
|
case (byte)PacketTypes.LightSyncPlayerPacket:
|
2021-12-23 22:03:01 +01:00
|
|
|
|
{
|
|
|
|
|
int len = message.ReadInt32();
|
|
|
|
|
byte[] data = message.ReadBytes(len);
|
|
|
|
|
|
|
|
|
|
LightSyncPlayerPacket packet = new LightSyncPlayerPacket();
|
|
|
|
|
packet.NetIncomingMessageToPacket(data);
|
|
|
|
|
|
|
|
|
|
LightSyncPlayer(packet);
|
|
|
|
|
}
|
2021-07-07 13:36:25 +02:00
|
|
|
|
break;
|
2021-07-12 05:00:48 +02:00
|
|
|
|
case (byte)PacketTypes.LightSyncPlayerVehPacket:
|
2021-12-23 22:03:01 +01:00
|
|
|
|
{
|
|
|
|
|
int len = message.ReadInt32();
|
|
|
|
|
byte[] data = message.ReadBytes(len);
|
|
|
|
|
|
|
|
|
|
LightSyncPlayerVehPacket packet = new LightSyncPlayerVehPacket();
|
|
|
|
|
packet.NetIncomingMessageToPacket(data);
|
|
|
|
|
|
|
|
|
|
LightSyncPlayerVeh(packet);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case (byte)PacketTypes.SuperLightSyncPacket:
|
|
|
|
|
{
|
|
|
|
|
int len = message.ReadInt32();
|
|
|
|
|
byte[] data = message.ReadBytes(len);
|
|
|
|
|
|
|
|
|
|
SuperLightSyncPacket packet = new SuperLightSyncPacket();
|
|
|
|
|
packet.NetIncomingMessageToPacket(data);
|
|
|
|
|
|
|
|
|
|
if (Main.Players.ContainsKey(packet.NetHandle))
|
|
|
|
|
{
|
|
|
|
|
EntitiesPlayer player = Main.Players[packet.NetHandle];
|
|
|
|
|
|
|
|
|
|
player.Position = packet.Position.ToVector();
|
|
|
|
|
player.Latency = packet.Latency.HasValue ? packet.Latency.Value : 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-07-12 05:00:48 +02:00
|
|
|
|
break;
|
|
|
|
|
case (byte)PacketTypes.FullSyncNpcPacket:
|
2021-12-23 22:03:01 +01:00
|
|
|
|
{
|
|
|
|
|
int len = message.ReadInt32();
|
|
|
|
|
byte[] data = message.ReadBytes(len);
|
|
|
|
|
|
|
|
|
|
FullSyncNpcPacket packet = new FullSyncNpcPacket();
|
|
|
|
|
packet.NetIncomingMessageToPacket(data);
|
|
|
|
|
|
|
|
|
|
FullSyncNpc(packet);
|
|
|
|
|
}
|
2021-07-12 05:00:48 +02:00
|
|
|
|
break;
|
2021-07-10 09:41:17 +02:00
|
|
|
|
case (byte)PacketTypes.FullSyncNpcVehPacket:
|
2021-12-23 22:03:01 +01:00
|
|
|
|
{
|
|
|
|
|
int len = message.ReadInt32();
|
|
|
|
|
byte[] data = message.ReadBytes(len);
|
|
|
|
|
|
|
|
|
|
FullSyncNpcVehPacket packet = new FullSyncNpcVehPacket();
|
|
|
|
|
packet.NetIncomingMessageToPacket(data);
|
|
|
|
|
|
|
|
|
|
FullSyncNpcVeh(packet);
|
|
|
|
|
}
|
2021-08-26 17:01:32 +02:00
|
|
|
|
break;
|
2021-07-07 13:36:25 +02:00
|
|
|
|
case (byte)PacketTypes.ChatMessagePacket:
|
2021-09-27 20:28:27 +02:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
int len = message.ReadInt32();
|
|
|
|
|
byte[] data = message.ReadBytes(len);
|
|
|
|
|
|
|
|
|
|
ChatMessagePacket packet = new ChatMessagePacket();
|
|
|
|
|
packet.NetIncomingMessageToPacket(data);
|
|
|
|
|
|
|
|
|
|
if (!COOPAPI.ChatMessageReceived(packet.Username, packet.Message))
|
|
|
|
|
{
|
|
|
|
|
Main.MainChat.AddMessage(packet.Username, packet.Message);
|
|
|
|
|
}
|
2021-09-27 20:28:27 +02:00
|
|
|
|
}
|
2021-07-07 13:36:25 +02:00
|
|
|
|
break;
|
2021-08-20 17:28:13 +02:00
|
|
|
|
case (byte)PacketTypes.NativeCallPacket:
|
2021-12-23 22:03:01 +01:00
|
|
|
|
{
|
|
|
|
|
int len = message.ReadInt32();
|
|
|
|
|
byte[] data = message.ReadBytes(len);
|
|
|
|
|
|
|
|
|
|
NativeCallPacket packet = new NativeCallPacket();
|
|
|
|
|
packet.NetIncomingMessageToPacket(data);
|
|
|
|
|
|
|
|
|
|
DecodeNativeCall(packet);
|
|
|
|
|
}
|
2021-08-20 17:28:13 +02:00
|
|
|
|
break;
|
2021-12-10 13:38:03 +01:00
|
|
|
|
case (byte)PacketTypes.NativeResponsePacket:
|
2021-12-23 22:03:01 +01:00
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
int len = message.ReadInt32();
|
|
|
|
|
byte[] data = message.ReadBytes(len);
|
|
|
|
|
|
|
|
|
|
NativeResponsePacket packet = new NativeResponsePacket();
|
|
|
|
|
packet.NetIncomingMessageToPacket(data);
|
|
|
|
|
|
|
|
|
|
DecodeNativeResponse(packet);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
GTA.UI.Notification.Show($"{ex.Message}");
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-12-10 13:38:03 +01:00
|
|
|
|
break;
|
2021-09-29 14:34:22 +02:00
|
|
|
|
case (byte)PacketTypes.ModPacket:
|
2021-12-23 22:03:01 +01:00
|
|
|
|
{
|
|
|
|
|
int len = message.ReadInt32();
|
|
|
|
|
byte[] data = message.ReadBytes(len);
|
|
|
|
|
|
|
|
|
|
ModPacket packet = new ModPacket();
|
|
|
|
|
packet.NetIncomingMessageToPacket(data);
|
|
|
|
|
|
|
|
|
|
COOPAPI.ModPacketReceived(packet.NetHandle, packet.Mod, packet.CustomPacketID, packet.Bytes);
|
|
|
|
|
}
|
2021-09-29 14:34:22 +02:00
|
|
|
|
break;
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}
|
|
|
|
|
break;
|
2021-08-16 12:31:49 +02:00
|
|
|
|
case NetIncomingMessageType.ConnectionLatencyUpdated:
|
|
|
|
|
Latency = message.ReadFloat();
|
|
|
|
|
break;
|
2021-07-07 13:36:25 +02:00
|
|
|
|
case NetIncomingMessageType.DebugMessage:
|
|
|
|
|
case NetIncomingMessageType.ErrorMessage:
|
|
|
|
|
case NetIncomingMessageType.WarningMessage:
|
|
|
|
|
case NetIncomingMessageType.VerboseDebugMessage:
|
2021-11-28 22:57:39 +01:00
|
|
|
|
#if DEBUG
|
|
|
|
|
// TODO?
|
|
|
|
|
#endif
|
2021-07-07 13:36:25 +02:00
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Client.Recycle(message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-29 14:34:22 +02:00
|
|
|
|
#region -- GET --
|
|
|
|
|
#region -- PLAYER --
|
2021-07-07 13:36:25 +02:00
|
|
|
|
private void PlayerConnect(PlayerConnectPacket packet)
|
|
|
|
|
{
|
2021-12-17 23:58:32 +01:00
|
|
|
|
EntitiesPlayer player = new EntitiesPlayer() { Username = packet.Username };
|
2021-07-07 13:36:25 +02:00
|
|
|
|
|
2021-12-14 22:39:15 +01:00
|
|
|
|
Main.Players.Add(packet.NetHandle, player);
|
|
|
|
|
COOPAPI.Connected(packet.NetHandle);
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void PlayerDisconnect(PlayerDisconnectPacket packet)
|
|
|
|
|
{
|
2021-12-14 22:39:15 +01:00
|
|
|
|
if (Main.Players.ContainsKey(packet.NetHandle))
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
2021-12-14 22:39:15 +01:00
|
|
|
|
EntitiesPlayer player = Main.Players[packet.NetHandle];
|
2021-07-08 21:57:21 +02:00
|
|
|
|
if (player.Character != null && player.Character.Exists())
|
|
|
|
|
{
|
|
|
|
|
player.Character.Kill();
|
|
|
|
|
player.Character.Delete();
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-09 00:20:09 +02:00
|
|
|
|
player.PedBlip?.Delete();
|
2021-07-07 13:36:25 +02:00
|
|
|
|
|
2021-12-14 22:39:15 +01:00
|
|
|
|
COOPAPI.Disconnected(packet.NetHandle);
|
|
|
|
|
Main.Players.Remove(packet.NetHandle);
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void FullSyncPlayer(FullSyncPlayerPacket packet)
|
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
if (Main.Players.ContainsKey(packet.NetHandle))
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
EntitiesPlayer player = Main.Players[packet.NetHandle];
|
2021-08-13 15:20:26 +02:00
|
|
|
|
|
2021-07-07 13:36:25 +02:00
|
|
|
|
player.ModelHash = packet.ModelHash;
|
2021-12-16 22:05:40 +01:00
|
|
|
|
player.Clothes = packet.Clothes;
|
2021-12-23 22:03:01 +01:00
|
|
|
|
player.Health = packet.Health;
|
|
|
|
|
player.Position = packet.Position.ToVector();
|
2021-07-07 13:36:25 +02:00
|
|
|
|
player.Rotation = packet.Rotation.ToVector();
|
|
|
|
|
player.Velocity = packet.Velocity.ToVector();
|
|
|
|
|
player.Speed = packet.Speed;
|
2021-07-08 21:57:21 +02:00
|
|
|
|
player.CurrentWeaponHash = packet.CurrentWeaponHash;
|
2021-12-15 01:25:16 +01:00
|
|
|
|
player.WeaponComponents = packet.WeaponComponents;
|
2021-07-07 13:36:25 +02:00
|
|
|
|
player.AimCoords = packet.AimCoords.ToVector();
|
|
|
|
|
player.IsAiming = (packet.Flag.Value & (byte)PedDataFlags.IsAiming) > 0;
|
|
|
|
|
player.IsShooting = (packet.Flag.Value & (byte)PedDataFlags.IsShooting) > 0;
|
|
|
|
|
player.IsReloading = (packet.Flag.Value & (byte)PedDataFlags.IsReloading) > 0;
|
|
|
|
|
player.IsJumping = (packet.Flag.Value & (byte)PedDataFlags.IsJumping) > 0;
|
|
|
|
|
player.IsRagdoll = (packet.Flag.Value & (byte)PedDataFlags.IsRagdoll) > 0;
|
|
|
|
|
player.IsOnFire = (packet.Flag.Value & (byte)PedDataFlags.IsOnFire) > 0;
|
2021-11-19 09:24:06 +01:00
|
|
|
|
player.IsInVehicle = false;
|
2021-12-14 19:33:52 +01:00
|
|
|
|
player.LastSyncWasFull = true;
|
2021-08-26 17:01:32 +02:00
|
|
|
|
|
2021-12-23 22:03:01 +01:00
|
|
|
|
player.Latency = packet.Latency.Value;
|
2021-11-19 22:08:15 +01:00
|
|
|
|
player.LastUpdateReceived = Util.GetTickCount64();
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-12 05:00:48 +02:00
|
|
|
|
private void FullSyncPlayerVeh(FullSyncPlayerVehPacket packet)
|
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
if (Main.Players.ContainsKey(packet.NetHandle))
|
2021-07-12 05:00:48 +02:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
EntitiesPlayer player = Main.Players[packet.NetHandle];
|
2021-08-13 15:20:26 +02:00
|
|
|
|
|
2021-07-12 05:00:48 +02:00
|
|
|
|
player.ModelHash = packet.ModelHash;
|
2021-12-16 22:05:40 +01:00
|
|
|
|
player.Clothes = packet.Clothes;
|
2021-12-23 22:03:01 +01:00
|
|
|
|
player.Health = packet.Health;
|
2021-07-12 05:00:48 +02:00
|
|
|
|
player.VehicleModelHash = packet.VehModelHash;
|
|
|
|
|
player.VehicleSeatIndex = packet.VehSeatIndex;
|
2021-12-23 22:03:01 +01:00
|
|
|
|
player.Position = packet.Position.ToVector();
|
2021-07-12 05:00:48 +02:00
|
|
|
|
player.VehicleRotation = packet.VehRotation.ToQuaternion();
|
2021-08-16 16:51:33 +02:00
|
|
|
|
player.VehicleEngineHealth = packet.VehEngineHealth;
|
2021-11-19 08:45:20 +01:00
|
|
|
|
player.VehRPM = packet.VehRPM;
|
2021-07-12 05:00:48 +02:00
|
|
|
|
player.VehicleVelocity = packet.VehVelocity.ToVector();
|
|
|
|
|
player.VehicleSpeed = packet.VehSpeed;
|
2021-07-13 16:30:33 +02:00
|
|
|
|
player.VehicleSteeringAngle = packet.VehSteeringAngle;
|
2021-12-06 00:56:08 +01:00
|
|
|
|
player.AimCoords = packet.VehAimCoords.ToVector();
|
2021-08-13 15:52:30 +02:00
|
|
|
|
player.VehicleColors = packet.VehColors;
|
2021-08-22 13:59:15 +02:00
|
|
|
|
player.VehicleMods = packet.VehMods;
|
2021-12-23 22:03:01 +01:00
|
|
|
|
player.VehDamageModel = packet.VehDamageModel;
|
2021-12-14 14:46:10 +01:00
|
|
|
|
player.VehLandingGear = packet.VehLandingGear;
|
2021-12-23 22:03:01 +01:00
|
|
|
|
player.VehIsEngineRunning = (packet.Flag.Value & (ushort)VehicleDataFlags.IsEngineRunning) > 0;
|
|
|
|
|
player.VehAreLightsOn = (packet.Flag.Value & (ushort)VehicleDataFlags.AreLightsOn) > 0;
|
|
|
|
|
player.VehAreHighBeamsOn = (packet.Flag.Value & (ushort)VehicleDataFlags.AreHighBeamsOn) > 0;
|
|
|
|
|
player.VehIsSireneActive = (packet.Flag.Value & (ushort)VehicleDataFlags.IsSirenActive) > 0;
|
|
|
|
|
player.VehicleDead = (packet.Flag.Value & (ushort)VehicleDataFlags.IsDead) > 0;
|
|
|
|
|
player.IsHornActive = (packet.Flag.Value & (ushort)VehicleDataFlags.IsHornActive) > 0;
|
|
|
|
|
player.Transformed = (packet.Flag.Value & (ushort)VehicleDataFlags.IsTransformed) > 0;
|
|
|
|
|
player.VehRoofOpened = (packet.Flag.Value & (ushort)VehicleDataFlags.RoofOpened) > 0;
|
2021-12-13 23:18:15 +01:00
|
|
|
|
player.IsInVehicle = true;
|
2021-12-14 19:33:52 +01:00
|
|
|
|
player.LastSyncWasFull = true;
|
2021-08-26 17:01:32 +02:00
|
|
|
|
|
2021-12-23 22:03:01 +01:00
|
|
|
|
player.Latency = packet.Latency.Value;
|
2021-11-19 22:08:15 +01:00
|
|
|
|
player.LastUpdateReceived = Util.GetTickCount64();
|
2021-07-12 05:00:48 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void LightSyncPlayer(LightSyncPlayerPacket packet)
|
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
if (Main.Players.ContainsKey(packet.NetHandle))
|
2021-07-12 05:00:48 +02:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
EntitiesPlayer player = Main.Players[packet.NetHandle];
|
2021-08-13 15:20:26 +02:00
|
|
|
|
|
2021-12-23 22:03:01 +01:00
|
|
|
|
player.Health = packet.Health;
|
|
|
|
|
player.Position = packet.Position.ToVector();
|
2021-07-12 05:00:48 +02:00
|
|
|
|
player.Rotation = packet.Rotation.ToVector();
|
|
|
|
|
player.Velocity = packet.Velocity.ToVector();
|
|
|
|
|
player.Speed = packet.Speed;
|
|
|
|
|
player.CurrentWeaponHash = packet.CurrentWeaponHash;
|
|
|
|
|
player.AimCoords = packet.AimCoords.ToVector();
|
|
|
|
|
player.IsAiming = (packet.Flag.Value & (byte)PedDataFlags.IsAiming) > 0;
|
|
|
|
|
player.IsShooting = (packet.Flag.Value & (byte)PedDataFlags.IsShooting) > 0;
|
|
|
|
|
player.IsReloading = (packet.Flag.Value & (byte)PedDataFlags.IsReloading) > 0;
|
|
|
|
|
player.IsJumping = (packet.Flag.Value & (byte)PedDataFlags.IsJumping) > 0;
|
|
|
|
|
player.IsRagdoll = (packet.Flag.Value & (byte)PedDataFlags.IsRagdoll) > 0;
|
|
|
|
|
player.IsOnFire = (packet.Flag.Value & (byte)PedDataFlags.IsOnFire) > 0;
|
2021-11-19 09:24:06 +01:00
|
|
|
|
player.IsInVehicle = false;
|
2021-12-13 23:18:15 +01:00
|
|
|
|
player.LastSyncWasFull = false;
|
2021-08-26 17:01:32 +02:00
|
|
|
|
|
2021-12-23 22:03:01 +01:00
|
|
|
|
if (packet.Flag.HasValue)
|
|
|
|
|
{
|
|
|
|
|
player.Latency = packet.Latency.Value;
|
|
|
|
|
}
|
2021-11-19 22:08:15 +01:00
|
|
|
|
player.LastUpdateReceived = Util.GetTickCount64();
|
2021-07-12 05:00:48 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void LightSyncPlayerVeh(LightSyncPlayerVehPacket packet)
|
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
if (Main.Players.ContainsKey(packet.NetHandle))
|
2021-07-12 05:00:48 +02:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
EntitiesPlayer player = Main.Players[packet.NetHandle];
|
2021-08-13 15:20:26 +02:00
|
|
|
|
|
2021-12-23 22:03:01 +01:00
|
|
|
|
player.Health = packet.Health;
|
2021-07-12 05:00:48 +02:00
|
|
|
|
player.VehicleModelHash = packet.VehModelHash;
|
|
|
|
|
player.VehicleSeatIndex = packet.VehSeatIndex;
|
2021-12-23 22:03:01 +01:00
|
|
|
|
player.Position = packet.Position.ToVector();
|
2021-07-12 05:00:48 +02:00
|
|
|
|
player.VehicleRotation = packet.VehRotation.ToQuaternion();
|
|
|
|
|
player.VehicleVelocity = packet.VehVelocity.ToVector();
|
|
|
|
|
player.VehicleSpeed = packet.VehSpeed;
|
2021-07-13 16:30:33 +02:00
|
|
|
|
player.VehicleSteeringAngle = packet.VehSteeringAngle;
|
2021-12-23 22:03:01 +01:00
|
|
|
|
player.VehIsEngineRunning = (packet.Flag.Value & (ushort)VehicleDataFlags.IsEngineRunning) > 0;
|
|
|
|
|
player.VehAreLightsOn = (packet.Flag.Value & (ushort)VehicleDataFlags.AreLightsOn) > 0;
|
|
|
|
|
player.VehAreHighBeamsOn = (packet.Flag.Value & (ushort)VehicleDataFlags.AreHighBeamsOn) > 0;
|
|
|
|
|
player.VehIsSireneActive = (packet.Flag.Value & (ushort)VehicleDataFlags.IsSirenActive) > 0;
|
|
|
|
|
player.VehicleDead = (packet.Flag.Value & (ushort)VehicleDataFlags.IsDead) > 0;
|
|
|
|
|
player.IsHornActive = (packet.Flag.Value & (ushort)VehicleDataFlags.IsHornActive) > 0;
|
|
|
|
|
player.Transformed = (packet.Flag.Value & (ushort)VehicleDataFlags.IsTransformed) > 0;
|
|
|
|
|
player.VehRoofOpened = (packet.Flag.Value & (ushort)VehicleDataFlags.RoofOpened) > 0;
|
2021-12-13 23:18:15 +01:00
|
|
|
|
player.IsInVehicle = true;
|
|
|
|
|
player.LastSyncWasFull = false;
|
2021-08-26 17:01:32 +02:00
|
|
|
|
|
2021-12-23 22:03:01 +01:00
|
|
|
|
player.Latency = packet.Latency.Value;
|
2021-11-19 22:08:15 +01:00
|
|
|
|
player.LastUpdateReceived = Util.GetTickCount64();
|
2021-07-12 05:00:48 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
2021-08-20 17:28:13 +02:00
|
|
|
|
|
|
|
|
|
private void DecodeNativeCall(NativeCallPacket packet)
|
|
|
|
|
{
|
|
|
|
|
List<InputArgument> arguments = new List<InputArgument>();
|
|
|
|
|
|
2021-12-10 15:55:45 +01:00
|
|
|
|
if (packet.Args != null && packet.Args.Count > 0)
|
2021-08-20 17:28:13 +02:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
packet.Args.ForEach(x =>
|
2021-08-21 16:52:17 +02:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Type type = x.GetType();
|
2021-12-10 15:55:45 +01:00
|
|
|
|
|
2021-12-23 22:03:01 +01:00
|
|
|
|
if (type == typeof(int))
|
2021-12-10 15:55:45 +01:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
arguments.Add((int)x);
|
2021-12-10 15:55:45 +01:00
|
|
|
|
}
|
2021-12-23 22:03:01 +01:00
|
|
|
|
else if (type == typeof(bool))
|
2021-12-10 15:55:45 +01:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
arguments.Add((bool)x);
|
2021-12-10 15:55:45 +01:00
|
|
|
|
}
|
2021-12-23 22:03:01 +01:00
|
|
|
|
else if (type == typeof(float))
|
2021-12-10 15:55:45 +01:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
arguments.Add((float)x);
|
2021-12-10 15:55:45 +01:00
|
|
|
|
}
|
2021-12-23 22:03:01 +01:00
|
|
|
|
else if (type == typeof(string))
|
2021-12-10 15:55:45 +01:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
arguments.Add((string)x);
|
2021-12-10 15:55:45 +01:00
|
|
|
|
}
|
2021-12-23 22:03:01 +01:00
|
|
|
|
else if (type == typeof(LVector3))
|
2021-12-10 15:55:45 +01:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
LVector3 vector = (LVector3)x;
|
|
|
|
|
arguments.Add((float)vector.X);
|
|
|
|
|
arguments.Add((float)vector.Y);
|
|
|
|
|
arguments.Add((float)vector.Z);
|
2021-12-10 15:55:45 +01:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
GTA.UI.Notification.Show("[DecodeNativeCall][" + packet.Hash + "]: Type of argument not found!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
2021-08-20 17:28:13 +02:00
|
|
|
|
|
|
|
|
|
Function.Call((Hash)packet.Hash, arguments.ToArray());
|
|
|
|
|
}
|
2021-12-10 13:38:03 +01:00
|
|
|
|
|
|
|
|
|
private void DecodeNativeResponse(NativeResponsePacket packet)
|
|
|
|
|
{
|
|
|
|
|
List<InputArgument> arguments = new List<InputArgument>();
|
|
|
|
|
Type typeOf = null;
|
|
|
|
|
|
2021-12-10 15:55:45 +01:00
|
|
|
|
if (packet.Args != null && packet.Args.Count > 0)
|
2021-12-10 13:38:03 +01:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
packet.Args.ForEach(x =>
|
2021-12-10 13:38:03 +01:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
typeOf = x.GetType();
|
2021-12-10 15:55:45 +01:00
|
|
|
|
|
2021-12-23 22:03:01 +01:00
|
|
|
|
if (typeOf == typeof(int))
|
2021-12-10 15:55:45 +01:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
arguments.Add((int)x);
|
2021-12-10 15:55:45 +01:00
|
|
|
|
}
|
2021-12-23 22:03:01 +01:00
|
|
|
|
else if (typeOf == typeof(bool))
|
2021-12-10 15:55:45 +01:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
arguments.Add((bool)x);
|
2021-12-10 15:55:45 +01:00
|
|
|
|
}
|
2021-12-23 22:03:01 +01:00
|
|
|
|
else if (typeOf == typeof(float))
|
2021-12-10 15:55:45 +01:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
arguments.Add((float)x);
|
2021-12-10 15:55:45 +01:00
|
|
|
|
}
|
2021-12-23 22:03:01 +01:00
|
|
|
|
else if (typeOf == typeof(string))
|
2021-12-10 15:55:45 +01:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
arguments.Add((string)x);
|
2021-12-10 15:55:45 +01:00
|
|
|
|
}
|
2021-12-23 22:03:01 +01:00
|
|
|
|
else if (typeOf == typeof(LVector3))
|
2021-12-10 15:55:45 +01:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
LVector3 vector = (LVector3)x;
|
|
|
|
|
arguments.Add((float)vector.X);
|
|
|
|
|
arguments.Add((float)vector.Y);
|
|
|
|
|
arguments.Add((float)vector.Z);
|
2021-12-10 15:55:45 +01:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
GTA.UI.Notification.Show("[DecodeNativeResponse][" + packet.Hash + "]: Type of argument not found!");
|
2021-12-10 15:55:45 +01:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
2021-12-10 13:38:03 +01:00
|
|
|
|
|
2021-12-23 22:03:01 +01:00
|
|
|
|
object result;
|
|
|
|
|
switch (packet.ResultType.Value)
|
2021-12-10 13:38:03 +01:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
case 0x00: // int
|
|
|
|
|
result = Function.Call<int>((Hash)packet.Hash, arguments.ToArray());
|
|
|
|
|
break;
|
|
|
|
|
case 0x01: // bool
|
|
|
|
|
result = Function.Call<bool>((Hash)packet.Hash, arguments.ToArray());
|
|
|
|
|
break;
|
|
|
|
|
case 0x02: // float
|
|
|
|
|
result = Function.Call<float>((Hash)packet.Hash, arguments.ToArray());
|
|
|
|
|
break;
|
|
|
|
|
case 0x03: // string
|
|
|
|
|
result = Function.Call<string>((Hash)packet.Hash, arguments.ToArray());
|
|
|
|
|
break;
|
|
|
|
|
case 0x04: // vector3
|
|
|
|
|
result = Function.Call<GTA.Math.Vector3>((Hash)packet.Hash, arguments.ToArray()).ToLVector();
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
GTA.UI.Notification.Show("[DecodeNativeResponse][" + packet.Hash + "]: Type of return not found!");
|
|
|
|
|
return;
|
2021-12-10 13:38:03 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
NetOutgoingMessage outgoingMessage = Client.CreateMessage();
|
|
|
|
|
new NativeResponsePacket()
|
|
|
|
|
{
|
|
|
|
|
Hash = 0,
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Args = new List<object>() { result },
|
|
|
|
|
ID = packet.ID
|
2021-12-10 13:38:03 +01:00
|
|
|
|
}.PacketToNetOutGoingMessage(outgoingMessage);
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Client.SendMessage(outgoingMessage, NetDeliveryMethod.ReliableOrdered, (byte)ConnectionChannel.Native);
|
2021-12-10 13:38:03 +01:00
|
|
|
|
Client.FlushSendQueue();
|
|
|
|
|
}
|
2021-09-29 14:34:22 +02:00
|
|
|
|
#endregion // -- PLAYER --
|
2021-07-12 05:00:48 +02:00
|
|
|
|
|
2021-09-29 14:34:22 +02:00
|
|
|
|
#region -- NPC --
|
2021-07-07 13:36:25 +02:00
|
|
|
|
private void FullSyncNpc(FullSyncNpcPacket packet)
|
|
|
|
|
{
|
2021-12-14 14:20:41 +01:00
|
|
|
|
lock (Main.NPCs)
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
2021-12-14 22:39:15 +01:00
|
|
|
|
if (Main.NPCs.ContainsKey(packet.NetHandle))
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
2021-12-18 08:04:17 +01:00
|
|
|
|
EntitiesPed npc = Main.NPCs[packet.NetHandle];
|
2021-08-13 15:20:26 +02:00
|
|
|
|
|
2021-12-14 19:33:52 +01:00
|
|
|
|
// "if" this NPC has left a vehicle
|
|
|
|
|
npc.NPCVehHandle = 0;
|
2021-08-13 15:20:26 +02:00
|
|
|
|
|
2021-07-13 07:56:32 +02:00
|
|
|
|
npc.ModelHash = packet.ModelHash;
|
2021-12-16 22:05:40 +01:00
|
|
|
|
npc.Clothes = packet.Clothes;
|
2021-07-13 07:56:32 +02:00
|
|
|
|
npc.Health = packet.Health;
|
|
|
|
|
npc.Position = packet.Position.ToVector();
|
|
|
|
|
npc.Rotation = packet.Rotation.ToVector();
|
|
|
|
|
npc.Velocity = packet.Velocity.ToVector();
|
|
|
|
|
npc.Speed = packet.Speed;
|
|
|
|
|
npc.CurrentWeaponHash = packet.CurrentWeaponHash;
|
|
|
|
|
npc.AimCoords = packet.AimCoords.ToVector();
|
|
|
|
|
npc.IsAiming = (packet.Flag.Value & (byte)PedDataFlags.IsAiming) > 0;
|
|
|
|
|
npc.IsShooting = (packet.Flag.Value & (byte)PedDataFlags.IsShooting) > 0;
|
|
|
|
|
npc.IsReloading = (packet.Flag.Value & (byte)PedDataFlags.IsReloading) > 0;
|
|
|
|
|
npc.IsJumping = (packet.Flag.Value & (byte)PedDataFlags.IsJumping) > 0;
|
|
|
|
|
npc.IsRagdoll = (packet.Flag.Value & (byte)PedDataFlags.IsRagdoll) > 0;
|
|
|
|
|
npc.IsOnFire = (packet.Flag.Value & (byte)PedDataFlags.IsOnFire) > 0;
|
2021-11-19 09:24:06 +01:00
|
|
|
|
npc.IsInVehicle = false;
|
2021-12-13 23:18:15 +01:00
|
|
|
|
npc.LastSyncWasFull = true;
|
2021-12-14 19:33:52 +01:00
|
|
|
|
|
|
|
|
|
npc.LastUpdateReceived = Util.GetTickCount64();
|
2021-07-13 07:56:32 +02:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2021-12-18 08:04:17 +01:00
|
|
|
|
Main.NPCs.Add(packet.NetHandle, new EntitiesPed()
|
2021-07-13 07:56:32 +02:00
|
|
|
|
{
|
|
|
|
|
ModelHash = packet.ModelHash,
|
2021-12-16 22:05:40 +01:00
|
|
|
|
Clothes = packet.Clothes,
|
2021-07-13 07:56:32 +02:00
|
|
|
|
Health = packet.Health,
|
|
|
|
|
Position = packet.Position.ToVector(),
|
|
|
|
|
Rotation = packet.Rotation.ToVector(),
|
|
|
|
|
Velocity = packet.Velocity.ToVector(),
|
|
|
|
|
Speed = packet.Speed,
|
|
|
|
|
CurrentWeaponHash = packet.CurrentWeaponHash,
|
|
|
|
|
AimCoords = packet.AimCoords.ToVector(),
|
|
|
|
|
IsAiming = (packet.Flag.Value & (byte)PedDataFlags.IsAiming) > 0,
|
|
|
|
|
IsShooting = (packet.Flag.Value & (byte)PedDataFlags.IsShooting) > 0,
|
|
|
|
|
IsReloading = (packet.Flag.Value & (byte)PedDataFlags.IsReloading) > 0,
|
|
|
|
|
IsJumping = (packet.Flag.Value & (byte)PedDataFlags.IsJumping) > 0,
|
|
|
|
|
IsRagdoll = (packet.Flag.Value & (byte)PedDataFlags.IsRagdoll) > 0,
|
|
|
|
|
IsOnFire = (packet.Flag.Value & (byte)PedDataFlags.IsOnFire) > 0,
|
2021-12-13 23:18:15 +01:00
|
|
|
|
IsInVehicle = false,
|
2021-12-14 19:33:52 +01:00
|
|
|
|
LastSyncWasFull = true,
|
|
|
|
|
|
|
|
|
|
LastUpdateReceived = Util.GetTickCount64()
|
2021-07-13 07:56:32 +02:00
|
|
|
|
});
|
|
|
|
|
}
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-10 09:41:17 +02:00
|
|
|
|
private void FullSyncNpcVeh(FullSyncNpcVehPacket packet)
|
|
|
|
|
{
|
2021-12-14 14:20:41 +01:00
|
|
|
|
lock (Main.NPCs)
|
2021-07-10 09:41:17 +02:00
|
|
|
|
{
|
2021-12-14 22:39:15 +01:00
|
|
|
|
if (Main.NPCs.ContainsKey(packet.NetHandle))
|
2021-07-10 09:41:17 +02:00
|
|
|
|
{
|
2021-12-18 08:04:17 +01:00
|
|
|
|
EntitiesPed npc = Main.NPCs[packet.NetHandle];
|
2021-08-13 15:20:26 +02:00
|
|
|
|
|
2021-12-14 19:33:52 +01:00
|
|
|
|
npc.NPCVehHandle = packet.VehHandle;
|
2021-08-13 15:20:26 +02:00
|
|
|
|
|
2021-07-13 07:56:32 +02:00
|
|
|
|
npc.ModelHash = packet.ModelHash;
|
2021-12-16 22:05:40 +01:00
|
|
|
|
npc.Clothes = packet.Clothes;
|
2021-07-13 07:56:32 +02:00
|
|
|
|
npc.Health = packet.Health;
|
|
|
|
|
npc.VehicleModelHash = packet.VehModelHash;
|
|
|
|
|
npc.VehicleSeatIndex = packet.VehSeatIndex;
|
2021-12-23 22:03:01 +01:00
|
|
|
|
npc.Position = packet.Position.ToVector();
|
2021-07-13 07:56:32 +02:00
|
|
|
|
npc.VehicleRotation = packet.VehRotation.ToQuaternion();
|
2021-08-16 16:51:33 +02:00
|
|
|
|
npc.VehicleEngineHealth = packet.VehEngineHealth;
|
2021-11-19 08:45:20 +01:00
|
|
|
|
npc.VehRPM = packet.VehRPM;
|
2021-07-13 07:56:32 +02:00
|
|
|
|
npc.VehicleVelocity = packet.VehVelocity.ToVector();
|
|
|
|
|
npc.VehicleSpeed = packet.VehSpeed;
|
2021-07-13 16:30:33 +02:00
|
|
|
|
npc.VehicleSteeringAngle = packet.VehSteeringAngle;
|
2021-08-13 15:52:30 +02:00
|
|
|
|
npc.VehicleColors = packet.VehColors;
|
2021-12-23 22:03:01 +01:00
|
|
|
|
npc.VehDamageModel = packet.VehDamageModel;
|
2021-12-14 14:46:10 +01:00
|
|
|
|
npc.VehLandingGear = packet.VehLandingGear;
|
2021-12-23 22:03:01 +01:00
|
|
|
|
npc.VehIsEngineRunning = (packet.Flag.Value & (ushort)VehicleDataFlags.IsEngineRunning) > 0;
|
|
|
|
|
npc.VehAreLightsOn = (packet.Flag.Value & (ushort)VehicleDataFlags.AreLightsOn) > 0;
|
|
|
|
|
npc.VehAreHighBeamsOn = (packet.Flag.Value & (ushort)VehicleDataFlags.AreHighBeamsOn) > 0;
|
|
|
|
|
npc.VehIsSireneActive = (packet.Flag.Value & (ushort)VehicleDataFlags.IsSirenActive) > 0;
|
|
|
|
|
npc.VehicleDead = (packet.Flag.Value & (ushort)VehicleDataFlags.IsDead) > 0;
|
|
|
|
|
npc.IsHornActive = (packet.Flag.Value & (ushort)VehicleDataFlags.IsHornActive) > 0;
|
|
|
|
|
npc.Transformed = (packet.Flag.Value & (ushort)VehicleDataFlags.IsTransformed) > 0;
|
|
|
|
|
npc.VehRoofOpened = (packet.Flag.Value & (ushort)VehicleDataFlags.RoofOpened) > 0;
|
2021-12-13 23:18:15 +01:00
|
|
|
|
npc.IsInVehicle = true;
|
|
|
|
|
npc.LastSyncWasFull = true;
|
2021-12-14 19:33:52 +01:00
|
|
|
|
|
|
|
|
|
npc.LastUpdateReceived = Util.GetTickCount64();
|
2021-07-13 07:56:32 +02:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2021-12-18 08:04:17 +01:00
|
|
|
|
Main.NPCs.Add(packet.NetHandle, new EntitiesPed()
|
2021-07-13 07:56:32 +02:00
|
|
|
|
{
|
2021-12-14 19:33:52 +01:00
|
|
|
|
NPCVehHandle = packet.VehHandle,
|
2021-08-13 15:20:26 +02:00
|
|
|
|
|
2021-07-13 07:56:32 +02:00
|
|
|
|
ModelHash = packet.ModelHash,
|
2021-12-16 22:05:40 +01:00
|
|
|
|
Clothes = packet.Clothes,
|
2021-07-13 07:56:32 +02:00
|
|
|
|
Health = packet.Health,
|
|
|
|
|
VehicleModelHash = packet.VehModelHash,
|
|
|
|
|
VehicleSeatIndex = packet.VehSeatIndex,
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Position = packet.Position.ToVector(),
|
2021-07-13 07:56:32 +02:00
|
|
|
|
VehicleRotation = packet.VehRotation.ToQuaternion(),
|
2021-08-16 16:51:33 +02:00
|
|
|
|
VehicleEngineHealth = packet.VehEngineHealth,
|
2021-11-19 08:45:20 +01:00
|
|
|
|
VehRPM = packet.VehRPM,
|
2021-07-13 07:56:32 +02:00
|
|
|
|
VehicleVelocity = packet.VehVelocity.ToVector(),
|
|
|
|
|
VehicleSpeed = packet.VehSpeed,
|
2021-07-13 16:30:33 +02:00
|
|
|
|
VehicleSteeringAngle = packet.VehSteeringAngle,
|
2021-08-13 15:52:30 +02:00
|
|
|
|
VehicleColors = packet.VehColors,
|
2021-12-23 22:03:01 +01:00
|
|
|
|
VehDamageModel = packet.VehDamageModel,
|
2021-12-14 14:46:10 +01:00
|
|
|
|
VehLandingGear = packet.VehLandingGear,
|
2021-12-23 22:03:01 +01:00
|
|
|
|
VehIsEngineRunning = (packet.Flag.Value & (ushort)VehicleDataFlags.IsEngineRunning) > 0,
|
|
|
|
|
VehAreLightsOn = (packet.Flag.Value & (ushort)VehicleDataFlags.AreLightsOn) > 0,
|
|
|
|
|
VehAreHighBeamsOn = (packet.Flag.Value & (ushort)VehicleDataFlags.AreHighBeamsOn) > 0,
|
|
|
|
|
VehIsSireneActive = (packet.Flag.Value & (ushort)VehicleDataFlags.IsSirenActive) > 0,
|
|
|
|
|
VehicleDead = (packet.Flag.Value & (ushort)VehicleDataFlags.IsDead) > 0,
|
|
|
|
|
IsHornActive = (packet.Flag.Value & (ushort)VehicleDataFlags.IsHornActive) > 0,
|
|
|
|
|
Transformed = (packet.Flag.Value & (ushort)VehicleDataFlags.IsTransformed) > 0,
|
|
|
|
|
VehRoofOpened = (packet.Flag.Value & (ushort)VehicleDataFlags.RoofOpened) > 0,
|
2021-12-13 23:18:15 +01:00
|
|
|
|
IsInVehicle = true,
|
2021-12-14 19:33:52 +01:00
|
|
|
|
LastSyncWasFull = true,
|
|
|
|
|
|
|
|
|
|
LastUpdateReceived = Util.GetTickCount64()
|
2021-07-13 07:56:32 +02:00
|
|
|
|
});
|
|
|
|
|
}
|
2021-07-10 09:41:17 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
2021-09-29 14:34:22 +02:00
|
|
|
|
#endregion // -- NPC --
|
|
|
|
|
#endregion
|
2021-07-07 13:36:25 +02:00
|
|
|
|
|
2021-09-29 14:34:22 +02:00
|
|
|
|
#region -- SEND --
|
2021-11-19 22:08:15 +01:00
|
|
|
|
private ulong LastPlayerFullSync = 0;
|
2021-12-03 20:30:00 +01:00
|
|
|
|
internal void SendPlayerData()
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
|
|
|
|
Ped player = Game.Player.Character;
|
|
|
|
|
|
|
|
|
|
NetOutgoingMessage outgoingMessage = Client.CreateMessage();
|
2021-08-15 13:58:56 +02:00
|
|
|
|
NetDeliveryMethod messageType;
|
2021-12-23 22:03:01 +01:00
|
|
|
|
int connectionChannel = 0;
|
2021-07-07 13:36:25 +02:00
|
|
|
|
|
2021-11-19 22:08:15 +01:00
|
|
|
|
if ((Util.GetTickCount64() - LastPlayerFullSync) > 500)
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
2021-08-15 13:58:56 +02:00
|
|
|
|
messageType = NetDeliveryMethod.UnreliableSequenced;
|
2021-12-23 22:03:01 +01:00
|
|
|
|
connectionChannel = (byte)ConnectionChannel.PlayerFull;
|
2021-08-15 13:58:56 +02:00
|
|
|
|
|
2021-12-13 20:25:31 +01:00
|
|
|
|
if (player.IsInVehicle())
|
2021-07-12 05:00:48 +02:00
|
|
|
|
{
|
2021-12-13 20:25:31 +01:00
|
|
|
|
Vehicle veh = player.CurrentVehicle;
|
2021-08-13 15:52:30 +02:00
|
|
|
|
|
2021-12-16 22:05:40 +01:00
|
|
|
|
byte primaryColor = 0;
|
|
|
|
|
byte secondaryColor = 0;
|
2021-12-13 20:25:31 +01:00
|
|
|
|
unsafe
|
2021-08-13 15:52:30 +02:00
|
|
|
|
{
|
2021-12-16 22:05:40 +01:00
|
|
|
|
Function.Call<byte>(Hash.GET_VEHICLE_COLOURS, veh, &primaryColor, &secondaryColor);
|
2021-08-13 15:52:30 +02:00
|
|
|
|
}
|
|
|
|
|
|
2021-07-12 05:00:48 +02:00
|
|
|
|
new FullSyncPlayerVehPacket()
|
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
NetHandle = Main.LocalNetHandle,
|
|
|
|
|
Health = player.Health,
|
2021-07-12 05:00:48 +02:00
|
|
|
|
ModelHash = player.Model.Hash,
|
2021-12-16 22:05:40 +01:00
|
|
|
|
Clothes = player.GetPedClothes(),
|
2021-11-19 10:44:16 +01:00
|
|
|
|
VehModelHash = veh.Model.Hash,
|
2021-12-16 22:05:40 +01:00
|
|
|
|
VehSeatIndex = (short)player.SeatIndex,
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Position = veh.Position.ToLVector(),
|
2021-12-13 20:25:31 +01:00
|
|
|
|
VehRotation = veh.Quaternion.ToLQuaternion(),
|
|
|
|
|
VehEngineHealth = veh.EngineHealth,
|
|
|
|
|
VehRPM = veh.CurrentRPM,
|
|
|
|
|
VehVelocity = veh.Velocity.ToLVector(),
|
|
|
|
|
VehSpeed = veh.Speed,
|
|
|
|
|
VehSteeringAngle = veh.SteeringAngle,
|
2021-12-06 00:56:08 +01:00
|
|
|
|
VehAimCoords = veh.IsTurretSeat((int)player.SeatIndex) ? Util.GetVehicleAimCoords().ToLVector() : new LVector3(),
|
2021-12-16 22:05:40 +01:00
|
|
|
|
VehColors = new byte[] { primaryColor, secondaryColor },
|
2021-12-13 20:25:31 +01:00
|
|
|
|
VehMods = veh.Mods.GetVehicleMods(),
|
2021-12-23 22:03:01 +01:00
|
|
|
|
VehDamageModel = veh.GetVehicleDamageModel(),
|
2021-12-14 14:46:10 +01:00
|
|
|
|
VehLandingGear = veh.IsPlane ? (byte)veh.LandingGearState : (byte)0,
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Flag = player.GetVehicleFlags(veh)
|
2021-07-12 05:00:48 +02:00
|
|
|
|
}.PacketToNetOutGoingMessage(outgoingMessage);
|
|
|
|
|
}
|
2021-11-19 10:44:16 +01:00
|
|
|
|
else
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
2021-11-19 10:44:16 +01:00
|
|
|
|
new FullSyncPlayerPacket()
|
2021-07-12 05:00:48 +02:00
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
NetHandle = Main.LocalNetHandle,
|
|
|
|
|
Health = player.Health,
|
2021-11-19 10:44:16 +01:00
|
|
|
|
ModelHash = player.Model.Hash,
|
2021-12-16 22:05:40 +01:00
|
|
|
|
Clothes = player.GetPedClothes(),
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Position = player.Position.ToLVector(),
|
2021-07-12 05:00:48 +02:00
|
|
|
|
Rotation = player.Rotation.ToLVector(),
|
|
|
|
|
Velocity = player.Velocity.ToLVector(),
|
2021-11-19 08:40:40 +01:00
|
|
|
|
Speed = player.GetPedSpeed(),
|
|
|
|
|
AimCoords = player.GetPedAimCoords(false).ToLVector(),
|
2021-12-15 03:31:57 +01:00
|
|
|
|
CurrentWeaponHash = (uint)player.Weapons.Current.Hash,
|
2021-12-15 01:25:16 +01:00
|
|
|
|
WeaponComponents = player.Weapons.Current.GetWeaponComponents(),
|
2021-12-13 23:18:15 +01:00
|
|
|
|
Flag = player.GetPedFlags(true)
|
2021-07-12 05:00:48 +02:00
|
|
|
|
}.PacketToNetOutGoingMessage(outgoingMessage);
|
|
|
|
|
}
|
2021-11-19 10:44:16 +01:00
|
|
|
|
|
2021-11-19 22:08:15 +01:00
|
|
|
|
LastPlayerFullSync = Util.GetTickCount64();
|
2021-11-19 10:44:16 +01:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
messageType = NetDeliveryMethod.ReliableSequenced;
|
2021-12-23 22:03:01 +01:00
|
|
|
|
connectionChannel = (byte)ConnectionChannel.PlayerLight;
|
2021-11-19 10:44:16 +01:00
|
|
|
|
|
|
|
|
|
if (player.IsInVehicle())
|
2021-07-12 05:00:48 +02:00
|
|
|
|
{
|
2021-11-19 10:44:16 +01:00
|
|
|
|
Vehicle veh = player.CurrentVehicle;
|
|
|
|
|
|
2021-07-12 05:00:48 +02:00
|
|
|
|
new LightSyncPlayerVehPacket()
|
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
NetHandle = Main.LocalNetHandle,
|
|
|
|
|
Health = player.Health,
|
2021-11-19 10:44:16 +01:00
|
|
|
|
VehModelHash = veh.Model.Hash,
|
2021-12-16 22:05:40 +01:00
|
|
|
|
VehSeatIndex = (short)player.SeatIndex,
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Position = veh.Position.ToLVector(),
|
2021-12-13 20:25:31 +01:00
|
|
|
|
VehRotation = veh.Quaternion.ToLQuaternion(),
|
|
|
|
|
VehVelocity = veh.Velocity.ToLVector(),
|
|
|
|
|
VehSpeed = veh.Speed,
|
|
|
|
|
VehSteeringAngle = veh.SteeringAngle,
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Flag = player.GetVehicleFlags(veh)
|
2021-11-19 10:44:16 +01:00
|
|
|
|
}.PacketToNetOutGoingMessage(outgoingMessage);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
new LightSyncPlayerPacket()
|
|
|
|
|
{
|
2021-12-23 22:03:01 +01:00
|
|
|
|
NetHandle = Main.LocalNetHandle,
|
|
|
|
|
Health = player.Health,
|
|
|
|
|
Position = player.Position.ToLVector(),
|
2021-11-19 10:44:16 +01:00
|
|
|
|
Rotation = player.Rotation.ToLVector(),
|
|
|
|
|
Velocity = player.Velocity.ToLVector(),
|
|
|
|
|
Speed = player.GetPedSpeed(),
|
|
|
|
|
AimCoords = player.GetPedAimCoords(false).ToLVector(),
|
2021-12-15 03:31:57 +01:00
|
|
|
|
CurrentWeaponHash = (uint)player.Weapons.Current.Hash,
|
2021-12-13 23:18:15 +01:00
|
|
|
|
Flag = player.GetPedFlags(true)
|
2021-07-12 05:00:48 +02:00
|
|
|
|
}.PacketToNetOutGoingMessage(outgoingMessage);
|
|
|
|
|
}
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}
|
|
|
|
|
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Client.SendMessage(outgoingMessage, messageType, connectionChannel);
|
2021-07-07 13:36:25 +02:00
|
|
|
|
Client.FlushSendQueue();
|
2021-08-18 11:47:59 +02:00
|
|
|
|
|
2021-09-29 14:34:22 +02:00
|
|
|
|
#if DEBUG
|
2021-08-18 11:47:59 +02:00
|
|
|
|
if (ShowNetworkInfo)
|
|
|
|
|
{
|
|
|
|
|
BytesSend += outgoingMessage.LengthBytes;
|
|
|
|
|
}
|
2021-09-29 14:34:22 +02:00
|
|
|
|
#endif
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}
|
|
|
|
|
|
2021-12-03 20:30:00 +01:00
|
|
|
|
internal void SendNpcData(Ped npc)
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
|
|
|
|
NetOutgoingMessage outgoingMessage = Client.CreateMessage();
|
|
|
|
|
|
2021-12-13 20:25:31 +01:00
|
|
|
|
if (npc.IsInVehicle())
|
2021-07-10 09:41:17 +02:00
|
|
|
|
{
|
2021-12-13 20:25:31 +01:00
|
|
|
|
Vehicle veh = npc.CurrentVehicle;
|
2021-08-13 15:52:30 +02:00
|
|
|
|
|
2021-12-16 22:05:40 +01:00
|
|
|
|
byte primaryColor = 0;
|
|
|
|
|
byte secondaryColor = 0;
|
2021-12-13 20:25:31 +01:00
|
|
|
|
unsafe
|
2021-08-13 15:52:30 +02:00
|
|
|
|
{
|
2021-12-16 22:05:40 +01:00
|
|
|
|
Function.Call<byte>(Hash.GET_VEHICLE_COLOURS, npc.CurrentVehicle, &primaryColor, &secondaryColor);
|
2021-08-13 15:52:30 +02:00
|
|
|
|
}
|
|
|
|
|
|
2021-07-10 09:41:17 +02:00
|
|
|
|
new FullSyncNpcVehPacket()
|
|
|
|
|
{
|
2021-12-14 22:39:15 +01:00
|
|
|
|
NetHandle = Main.LocalNetHandle + npc.Handle,
|
|
|
|
|
VehHandle = Main.LocalNetHandle + veh.Handle,
|
2021-07-10 09:41:17 +02:00
|
|
|
|
ModelHash = npc.Model.Hash,
|
2021-12-16 22:05:40 +01:00
|
|
|
|
Clothes = npc.GetPedClothes(),
|
2021-07-10 09:41:17 +02:00
|
|
|
|
Health = npc.Health,
|
2021-11-19 10:44:16 +01:00
|
|
|
|
VehModelHash = veh.Model.Hash,
|
2021-12-16 22:05:40 +01:00
|
|
|
|
VehSeatIndex = (short)npc.SeatIndex,
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Position = veh.Position.ToLVector(),
|
2021-12-13 20:25:31 +01:00
|
|
|
|
VehRotation = veh.Quaternion.ToLQuaternion(),
|
|
|
|
|
VehEngineHealth = veh.EngineHealth,
|
|
|
|
|
VehRPM = veh.CurrentRPM,
|
|
|
|
|
VehVelocity = veh.Velocity.ToLVector(),
|
|
|
|
|
VehSpeed = veh.Speed,
|
|
|
|
|
VehSteeringAngle = veh.SteeringAngle,
|
2021-12-16 22:05:40 +01:00
|
|
|
|
VehColors = new byte[] { primaryColor, secondaryColor },
|
2021-12-13 20:25:31 +01:00
|
|
|
|
VehMods = veh.Mods.GetVehicleMods(),
|
2021-12-23 22:03:01 +01:00
|
|
|
|
VehDamageModel = veh.GetVehicleDamageModel(),
|
2021-12-14 14:46:10 +01:00
|
|
|
|
VehLandingGear = veh.IsPlane ? (byte)veh.LandingGearState : (byte)0,
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Flag = npc.GetVehicleFlags(veh)
|
2021-11-19 10:44:16 +01:00
|
|
|
|
}.PacketToNetOutGoingMessage(outgoingMessage);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
new FullSyncNpcPacket()
|
|
|
|
|
{
|
2021-12-14 22:39:15 +01:00
|
|
|
|
NetHandle = Main.LocalNetHandle + npc.Handle,
|
2021-11-19 10:44:16 +01:00
|
|
|
|
ModelHash = npc.Model.Hash,
|
2021-12-16 22:05:40 +01:00
|
|
|
|
Clothes = npc.GetPedClothes(),
|
2021-11-19 10:44:16 +01:00
|
|
|
|
Health = npc.Health,
|
|
|
|
|
Position = npc.Position.ToLVector(),
|
|
|
|
|
Rotation = npc.Rotation.ToLVector(),
|
|
|
|
|
Velocity = npc.Velocity.ToLVector(),
|
|
|
|
|
Speed = npc.GetPedSpeed(),
|
|
|
|
|
AimCoords = npc.GetPedAimCoords(true).ToLVector(),
|
2021-12-15 03:31:57 +01:00
|
|
|
|
CurrentWeaponHash = (uint)npc.Weapons.Current.Hash,
|
2021-11-19 10:44:16 +01:00
|
|
|
|
Flag = npc.GetPedFlags(true)
|
2021-07-10 09:41:17 +02:00
|
|
|
|
}.PacketToNetOutGoingMessage(outgoingMessage);
|
|
|
|
|
}
|
2021-07-07 13:36:25 +02:00
|
|
|
|
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Client.SendMessage(outgoingMessage, NetDeliveryMethod.Unreliable, (byte)ConnectionChannel.NPCFull);
|
2021-07-07 13:36:25 +02:00
|
|
|
|
Client.FlushSendQueue();
|
2021-08-18 11:47:59 +02:00
|
|
|
|
|
2021-09-29 14:34:22 +02:00
|
|
|
|
#if DEBUG
|
2021-08-18 11:47:59 +02:00
|
|
|
|
if (ShowNetworkInfo)
|
|
|
|
|
{
|
|
|
|
|
BytesSend += outgoingMessage.LengthBytes;
|
|
|
|
|
}
|
2021-09-29 14:34:22 +02:00
|
|
|
|
#endif
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}
|
|
|
|
|
|
2021-12-03 20:30:00 +01:00
|
|
|
|
internal void SendChatMessage(string message)
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
|
|
|
|
NetOutgoingMessage outgoingMessage = Client.CreateMessage();
|
2021-12-23 22:03:01 +01:00
|
|
|
|
|
|
|
|
|
new ChatMessagePacket() { Username = Main.MainSettings.Username, Message = message }.PacketToNetOutGoingMessage(outgoingMessage);
|
|
|
|
|
|
|
|
|
|
Client.SendMessage(outgoingMessage, NetDeliveryMethod.ReliableOrdered, (byte)ConnectionChannel.Chat);
|
2021-07-07 13:36:25 +02:00
|
|
|
|
Client.FlushSendQueue();
|
2021-08-18 11:47:59 +02:00
|
|
|
|
|
2021-09-29 14:34:22 +02:00
|
|
|
|
#if DEBUG
|
2021-08-18 11:47:59 +02:00
|
|
|
|
if (ShowNetworkInfo)
|
|
|
|
|
{
|
|
|
|
|
BytesSend += outgoingMessage.LengthBytes;
|
|
|
|
|
}
|
2021-09-29 14:34:22 +02:00
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-03 20:30:00 +01:00
|
|
|
|
internal void SendModData(long target, string mod, byte customID, byte[] bytes)
|
2021-09-29 14:34:22 +02:00
|
|
|
|
{
|
|
|
|
|
NetOutgoingMessage outgoingMessage = Client.CreateMessage();
|
|
|
|
|
new ModPacket()
|
|
|
|
|
{
|
2021-12-14 22:39:15 +01:00
|
|
|
|
NetHandle = Main.LocalNetHandle,
|
2021-09-30 23:35:42 +02:00
|
|
|
|
Target = target,
|
2021-09-29 14:34:22 +02:00
|
|
|
|
Mod = mod,
|
2021-12-14 22:39:15 +01:00
|
|
|
|
CustomPacketID = customID,
|
2021-09-29 14:34:22 +02:00
|
|
|
|
Bytes = bytes
|
|
|
|
|
}.PacketToNetOutGoingMessage(outgoingMessage);
|
2021-12-23 22:03:01 +01:00
|
|
|
|
Client.SendMessage(outgoingMessage, NetDeliveryMethod.ReliableOrdered, (byte)ConnectionChannel.Mod);
|
2021-09-29 14:34:22 +02:00
|
|
|
|
Client.FlushSendQueue();
|
|
|
|
|
|
|
|
|
|
#if DEBUG
|
|
|
|
|
if (ShowNetworkInfo)
|
|
|
|
|
{
|
|
|
|
|
BytesSend += outgoingMessage.LengthBytes;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}
|
2021-09-29 14:34:22 +02:00
|
|
|
|
#endregion
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}
|
|
|
|
|
}
|