better but not finished yet
This commit is contained in:
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.Serialization.Formatters.Binary;
|
||||||
|
|
||||||
using Lidgren.Network;
|
using Lidgren.Network;
|
||||||
using ProtoBuf;
|
using ProtoBuf;
|
||||||
@ -215,7 +216,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.ModPacket);
|
message.Write((byte)PacketTypes.ModPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -225,7 +226,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
ModPacket data = CoopSerializer.Deserialize<ModPacket>(message.ReadBytes(len));
|
ModPacket data = message.ReadBytes(len).Deserialize<ModPacket>();
|
||||||
|
|
||||||
ID = data.ID;
|
ID = data.ID;
|
||||||
Mod = data.Mod;
|
Mod = data.Mod;
|
||||||
@ -257,7 +258,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.HandshakePacket);
|
message.Write((byte)PacketTypes.HandshakePacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -267,7 +268,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
HandshakePacket data = CoopSerializer.Deserialize<HandshakePacket>(message.ReadBytes(len));
|
HandshakePacket data = message.ReadBytes(len).Deserialize<HandshakePacket>();
|
||||||
|
|
||||||
ID = data.ID;
|
ID = data.ID;
|
||||||
SocialClubName = data.SocialClubName;
|
SocialClubName = data.SocialClubName;
|
||||||
@ -293,7 +294,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.PlayerConnectPacket);
|
message.Write((byte)PacketTypes.PlayerConnectPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -303,7 +304,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
PlayerConnectPacket data = CoopSerializer.Deserialize<PlayerConnectPacket>(message.ReadBytes(len));
|
PlayerConnectPacket data = message.ReadBytes(len).Deserialize<PlayerConnectPacket>();
|
||||||
|
|
||||||
ID = data.ID;
|
ID = data.ID;
|
||||||
SocialClubName = data.SocialClubName;
|
SocialClubName = data.SocialClubName;
|
||||||
@ -321,7 +322,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.PlayerDisconnectPacket);
|
message.Write((byte)PacketTypes.PlayerDisconnectPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -331,7 +332,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
PlayerDisconnectPacket data = CoopSerializer.Deserialize<PlayerDisconnectPacket>(message.ReadBytes(len));
|
PlayerDisconnectPacket data = message.ReadBytes(len).Deserialize<PlayerDisconnectPacket>();
|
||||||
|
|
||||||
ID = data.ID;
|
ID = data.ID;
|
||||||
}
|
}
|
||||||
@ -387,7 +388,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.FullSyncPlayerPacket);
|
message.Write((byte)PacketTypes.FullSyncPlayerPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -397,7 +398,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
FullSyncPlayerPacket data = CoopSerializer.Deserialize<FullSyncPlayerPacket>(message.ReadBytes(len));
|
FullSyncPlayerPacket data = message.ReadBytes(len).Deserialize<FullSyncPlayerPacket>();
|
||||||
|
|
||||||
Extra = data.Extra;
|
Extra = data.Extra;
|
||||||
ModelHash = data.ModelHash;
|
ModelHash = data.ModelHash;
|
||||||
@ -463,7 +464,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.FullSyncPlayerVehPacket);
|
message.Write((byte)PacketTypes.FullSyncPlayerVehPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -473,7 +474,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
FullSyncPlayerVehPacket data = CoopSerializer.Deserialize<FullSyncPlayerVehPacket>(message.ReadBytes(len));
|
FullSyncPlayerVehPacket data = message.ReadBytes(len).Deserialize<FullSyncPlayerVehPacket>();
|
||||||
|
|
||||||
Extra = data.Extra;
|
Extra = data.Extra;
|
||||||
ModelHash = data.ModelHash;
|
ModelHash = data.ModelHash;
|
||||||
@ -521,7 +522,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.LightSyncPlayerPacket);
|
message.Write((byte)PacketTypes.LightSyncPlayerPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -531,7 +532,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
LightSyncPlayerPacket data = CoopSerializer.Deserialize<LightSyncPlayerPacket>(message.ReadBytes(len));
|
LightSyncPlayerPacket data = message.ReadBytes(len).Deserialize<LightSyncPlayerPacket>();
|
||||||
|
|
||||||
Extra = data.Extra;
|
Extra = data.Extra;
|
||||||
Rotation = data.Rotation;
|
Rotation = data.Rotation;
|
||||||
@ -577,7 +578,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.LightSyncPlayerVehPacket);
|
message.Write((byte)PacketTypes.LightSyncPlayerVehPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -587,7 +588,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
LightSyncPlayerVehPacket data = CoopSerializer.Deserialize<LightSyncPlayerVehPacket>(message.ReadBytes(len));
|
LightSyncPlayerVehPacket data = message.ReadBytes(len).Deserialize<LightSyncPlayerVehPacket>();
|
||||||
|
|
||||||
Extra = data.Extra;
|
Extra = data.Extra;
|
||||||
VehModelHash = data.VehModelHash;
|
VehModelHash = data.VehModelHash;
|
||||||
@ -611,7 +612,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.SuperLightSyncPlayerPacket);
|
message.Write((byte)PacketTypes.SuperLightSyncPlayerPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -621,7 +622,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
SuperLightSyncPlayerPacket data = CoopSerializer.Deserialize<SuperLightSyncPlayerPacket>(message.ReadBytes(len));
|
SuperLightSyncPlayerPacket data = message.ReadBytes(len).Deserialize<SuperLightSyncPlayerPacket>();
|
||||||
|
|
||||||
Extra = data.Extra;
|
Extra = data.Extra;
|
||||||
}
|
}
|
||||||
@ -650,7 +651,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
ChatMessagePacket data = CoopSerializer.Deserialize<ChatMessagePacket>(message.ReadBytes(len));
|
ChatMessagePacket data = message.ReadBytes(len).Deserialize<ChatMessagePacket>();
|
||||||
|
|
||||||
Username = data.Username;
|
Username = data.Username;
|
||||||
Message = data.Message;
|
Message = data.Message;
|
||||||
@ -681,7 +682,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
NativeCallPacket data = CoopSerializer.Deserialize<NativeCallPacket>(message.ReadBytes(len));
|
NativeCallPacket data = message.ReadBytes(len).Deserialize<NativeCallPacket>();
|
||||||
|
|
||||||
Hash = data.Hash;
|
Hash = data.Hash;
|
||||||
Args = data.Args;
|
Args = data.Args;
|
||||||
@ -784,7 +785,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
FullSyncNpcPacket data = CoopSerializer.Deserialize<FullSyncNpcPacket>(message.ReadBytes(len));
|
FullSyncNpcPacket data = message.ReadBytes(len).Deserialize<FullSyncNpcPacket>();
|
||||||
|
|
||||||
ID = data.ID;
|
ID = data.ID;
|
||||||
ModelHash = data.ModelHash;
|
ModelHash = data.ModelHash;
|
||||||
@ -868,7 +869,7 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
FullSyncNpcVehPacket data = CoopSerializer.Deserialize<FullSyncNpcVehPacket>(message.ReadBytes(len));
|
FullSyncNpcVehPacket data = message.ReadBytes(len).Deserialize<FullSyncNpcVehPacket>();
|
||||||
|
|
||||||
ID = data.ID;
|
ID = data.ID;
|
||||||
ModelHash = data.ModelHash;
|
ModelHash = data.ModelHash;
|
||||||
@ -891,9 +892,41 @@ namespace CoopClient
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
class CoopSerializer
|
public static class CoopSerializer
|
||||||
{
|
{
|
||||||
public static T Deserialize<T>(byte[] data) where T : new()
|
public static byte[] CSerialize(this object obj)
|
||||||
|
{
|
||||||
|
if (obj == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
BinaryFormatter bf = new BinaryFormatter();
|
||||||
|
using (MemoryStream ms = new MemoryStream())
|
||||||
|
{
|
||||||
|
bf.Serialize(ms, obj);
|
||||||
|
return ms.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static T CDeserialize<T>(this byte[] bytes) where T : class
|
||||||
|
{
|
||||||
|
if (bytes == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
using (MemoryStream memStream = new MemoryStream())
|
||||||
|
{
|
||||||
|
BinaryFormatter binForm = new BinaryFormatter();
|
||||||
|
memStream.Write(bytes, 0, bytes.Length);
|
||||||
|
memStream.Seek(0, SeekOrigin.Begin);
|
||||||
|
T obj = (T)binForm.Deserialize(memStream);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static T Deserialize<T>(this byte[] data) where T : new()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -908,7 +941,7 @@ namespace CoopClient
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static byte[] Serialize<T>(T packet)
|
internal static byte[] Serialize<T>(this T packet)
|
||||||
{
|
{
|
||||||
using (MemoryStream stream = new MemoryStream())
|
using (MemoryStream stream = new MemoryStream())
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using CoopServer;
|
using CoopServer;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace FirstGameMode
|
namespace FirstGameMode
|
||||||
{
|
{
|
||||||
@ -38,5 +39,14 @@ namespace FirstGameMode
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Command("inrange")]
|
||||||
|
public static void InRangeCommand(CommandContext ctx)
|
||||||
|
{
|
||||||
|
List<string> list = new();
|
||||||
|
API.GetAllClients().FindAll(x => x.Player.IsInRangeOf(ctx.Client.Player.Position, 15f)).ForEach(x => list.Add(x.Player.Username));
|
||||||
|
|
||||||
|
ctx.Client.SendChatMessage(string.Join(", ", list.ToArray()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
|
||||||
using System.Runtime.Serialization.Formatters.Binary;
|
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Timers;
|
using System.Timers;
|
||||||
|
|
||||||
@ -37,16 +35,18 @@ namespace FirstGameMode
|
|||||||
|
|
||||||
private void OnModPacketReceived(long from, string mod, byte customID, byte[] bytes, CancelEventArgs args)
|
private void OnModPacketReceived(long from, string mod, byte customID, byte[] bytes, CancelEventArgs args)
|
||||||
{
|
{
|
||||||
if (mod == "FirstScript" && customID == 1)
|
if (mod != "FirstScript" || customID != 1)
|
||||||
{
|
{
|
||||||
args.Cancel = true;
|
return;
|
||||||
|
|
||||||
// Get data from bytes
|
|
||||||
SetPlayerTime setPlayerTime = bytes.Deserialize<SetPlayerTime>();
|
|
||||||
|
|
||||||
// Find the client by 'from' and send the time back as a nativecall
|
|
||||||
API.GetAllClients().Find(x => x.ID == from).SendNativeCall(0x47C3B5848C3E45D8, setPlayerTime.Hours, setPlayerTime.Minutes, setPlayerTime.Seconds);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
args.Cancel = true;
|
||||||
|
|
||||||
|
// Get data from bytes
|
||||||
|
SetPlayerTime setPlayerTime = bytes.CDeserialize<SetPlayerTime>();
|
||||||
|
|
||||||
|
// Find the client by 'from' and send the time back as a nativecall
|
||||||
|
API.GetAllClients().Find(x => x.ID == from).SendNativeCall(0x47C3B5848C3E45D8, setPlayerTime.Hours, setPlayerTime.Minutes, setPlayerTime.Seconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void RunningCommand(CommandContext ctx)
|
public static void RunningCommand(CommandContext ctx)
|
||||||
@ -81,39 +81,4 @@ namespace FirstGameMode
|
|||||||
API.SendChatMessageToAll(message, username);
|
API.SendChatMessageToAll(message, username);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class CustomSerializer
|
|
||||||
{
|
|
||||||
public static byte[] SerializeToByteArray(this object obj)
|
|
||||||
{
|
|
||||||
if (obj == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
BinaryFormatter bf = new BinaryFormatter();
|
|
||||||
using (MemoryStream ms = new MemoryStream())
|
|
||||||
{
|
|
||||||
bf.Serialize(ms, obj);
|
|
||||||
return ms.ToArray();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static T Deserialize<T>(this byte[] byteArray) where T : class
|
|
||||||
{
|
|
||||||
if (byteArray == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
using (MemoryStream memStream = new MemoryStream())
|
|
||||||
{
|
|
||||||
BinaryFormatter binForm = new BinaryFormatter();
|
|
||||||
memStream.Write(byteArray, 0, byteArray.Length);
|
|
||||||
memStream.Seek(0, SeekOrigin.Begin);
|
|
||||||
T obj = (T)binForm.Deserialize(memStream);
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
|
||||||
using System.Runtime.Serialization.Formatters.Binary;
|
|
||||||
|
|
||||||
using GTA;
|
using GTA;
|
||||||
|
|
||||||
@ -51,8 +49,8 @@ namespace FirstScript
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CoopClient.Interface.SendDataToAll("FirstScript", 0, new TestPacketClass() { A = 5, B = 15 }.SerializeToByteArray());
|
CoopClient.Interface.SendDataToAll("FirstScript", 0, CoopClient.CoopSerializer.CSerialize(new TestPacketClass() { A = 5, B = 15 }));
|
||||||
CoopClient.Interface.SendDataToAll("FirstScript", 1, new SetPlayerTimePacket() { Hours = 0, Minutes = 0, Seconds = 0 }.SerializeToByteArray());
|
//CoopClient.Interface.SendDataToAll("FirstScript", 1, CoopClient.CoopSerializer.CSerialize(new SetPlayerTimePacket() { Hours = 0, Minutes = 0, Seconds = 0 }));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnModPacketReceived(long from, string mod, byte customID, byte[] bytes)
|
private void OnModPacketReceived(long from, string mod, byte customID, byte[] bytes)
|
||||||
@ -65,52 +63,14 @@ namespace FirstScript
|
|||||||
switch (customID)
|
switch (customID)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
TestPacketClass testPacketClass = bytes.Deserialize<TestPacketClass>();
|
TestPacketClass testPacketClass = CoopClient.CoopSerializer.CDeserialize<TestPacketClass>(bytes);
|
||||||
|
|
||||||
GTA.UI.Notification.Show($"ModPacket(0)({from}): A[{testPacketClass.A}] B[{testPacketClass.B}]");
|
GTA.UI.Notification.Show($"ModPacket(0)({from}): A[{testPacketClass.A}] B[{testPacketClass.B}]");
|
||||||
break;
|
break;
|
||||||
case 1:
|
|
||||||
GTA.UI.Notification.Show($"ModPacket(0)({from}): Nice!");
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
GTA.UI.Notification.Show($"ModPacket({from}): ~r~Unknown customID!");
|
GTA.UI.Notification.Show($"ModPacket({from}): ~r~Unknown customID!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class CustomSerializer
|
|
||||||
{
|
|
||||||
public static byte[] SerializeToByteArray(this object obj)
|
|
||||||
{
|
|
||||||
if (obj == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
BinaryFormatter bf = new BinaryFormatter();
|
|
||||||
using (MemoryStream ms = new MemoryStream())
|
|
||||||
{
|
|
||||||
bf.Serialize(ms, obj);
|
|
||||||
return ms.ToArray();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static T Deserialize<T>(this byte[] byteArray) where T : class
|
|
||||||
{
|
|
||||||
if (byteArray == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
using (MemoryStream memStream = new MemoryStream())
|
|
||||||
{
|
|
||||||
BinaryFormatter binForm = new BinaryFormatter();
|
|
||||||
memStream.Write(byteArray, 0, byteArray.Length);
|
|
||||||
memStream.Seek(0, SeekOrigin.Begin);
|
|
||||||
T obj = (T)binForm.Deserialize(memStream);
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.Serialization.Formatters.Binary;
|
||||||
|
|
||||||
using Lidgren.Network;
|
using Lidgren.Network;
|
||||||
using ProtoBuf;
|
using ProtoBuf;
|
||||||
@ -148,7 +149,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.ModPacket);
|
message.Write((byte)PacketTypes.ModPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -158,7 +159,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
ModPacket data = CoopSerializer.Deserialize<ModPacket>(message.ReadBytes(len));
|
ModPacket data = message.ReadBytes(len).Deserialize<ModPacket>();
|
||||||
|
|
||||||
ID = data.ID;
|
ID = data.ID;
|
||||||
Mod = data.Mod;
|
Mod = data.Mod;
|
||||||
@ -190,7 +191,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.HandshakePacket);
|
message.Write((byte)PacketTypes.HandshakePacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -200,7 +201,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
HandshakePacket data = CoopSerializer.Deserialize<HandshakePacket>(message.ReadBytes(len));
|
HandshakePacket data = message.ReadBytes(len).Deserialize<HandshakePacket>();
|
||||||
|
|
||||||
ID = data.ID;
|
ID = data.ID;
|
||||||
SocialClubName = data.SocialClubName;
|
SocialClubName = data.SocialClubName;
|
||||||
@ -226,7 +227,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.PlayerConnectPacket);
|
message.Write((byte)PacketTypes.PlayerConnectPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -236,7 +237,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
PlayerConnectPacket data = CoopSerializer.Deserialize<PlayerConnectPacket>(message.ReadBytes(len));
|
PlayerConnectPacket data = message.ReadBytes(len).Deserialize<PlayerConnectPacket>();
|
||||||
|
|
||||||
ID = data.ID;
|
ID = data.ID;
|
||||||
SocialClubName = data.SocialClubName;
|
SocialClubName = data.SocialClubName;
|
||||||
@ -254,7 +255,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.PlayerDisconnectPacket);
|
message.Write((byte)PacketTypes.PlayerDisconnectPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -264,7 +265,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
PlayerDisconnectPacket data = CoopSerializer.Deserialize<PlayerDisconnectPacket>(message.ReadBytes(len));
|
PlayerDisconnectPacket data = message.ReadBytes(len).Deserialize<PlayerDisconnectPacket>();
|
||||||
|
|
||||||
ID = data.ID;
|
ID = data.ID;
|
||||||
}
|
}
|
||||||
@ -320,7 +321,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.FullSyncPlayerPacket);
|
message.Write((byte)PacketTypes.FullSyncPlayerPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -330,7 +331,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
FullSyncPlayerPacket data = CoopSerializer.Deserialize<FullSyncPlayerPacket>(message.ReadBytes(len));
|
FullSyncPlayerPacket data = message.ReadBytes(len).Deserialize<FullSyncPlayerPacket>();
|
||||||
|
|
||||||
Extra = data.Extra;
|
Extra = data.Extra;
|
||||||
ModelHash = data.ModelHash;
|
ModelHash = data.ModelHash;
|
||||||
@ -396,7 +397,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.FullSyncPlayerVehPacket);
|
message.Write((byte)PacketTypes.FullSyncPlayerVehPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -406,7 +407,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
FullSyncPlayerVehPacket data = CoopSerializer.Deserialize<FullSyncPlayerVehPacket>(message.ReadBytes(len));
|
FullSyncPlayerVehPacket data = message.ReadBytes(len).Deserialize<FullSyncPlayerVehPacket>();
|
||||||
|
|
||||||
Extra = data.Extra;
|
Extra = data.Extra;
|
||||||
ModelHash = data.ModelHash;
|
ModelHash = data.ModelHash;
|
||||||
@ -454,7 +455,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.LightSyncPlayerPacket);
|
message.Write((byte)PacketTypes.LightSyncPlayerPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -464,7 +465,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
LightSyncPlayerPacket data = CoopSerializer.Deserialize<LightSyncPlayerPacket>(message.ReadBytes(len));
|
LightSyncPlayerPacket data = message.ReadBytes(len).Deserialize<LightSyncPlayerPacket>();
|
||||||
|
|
||||||
Extra = data.Extra;
|
Extra = data.Extra;
|
||||||
Rotation = data.Rotation;
|
Rotation = data.Rotation;
|
||||||
@ -510,7 +511,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.LightSyncPlayerVehPacket);
|
message.Write((byte)PacketTypes.LightSyncPlayerVehPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -520,7 +521,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
LightSyncPlayerVehPacket data = CoopSerializer.Deserialize<LightSyncPlayerVehPacket>(message.ReadBytes(len));
|
LightSyncPlayerVehPacket data = message.ReadBytes(len).Deserialize<LightSyncPlayerVehPacket>();
|
||||||
|
|
||||||
Extra = data.Extra;
|
Extra = data.Extra;
|
||||||
VehModelHash = data.VehModelHash;
|
VehModelHash = data.VehModelHash;
|
||||||
@ -544,7 +545,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
message.Write((byte)PacketTypes.SuperLightSyncPlayerPacket);
|
message.Write((byte)PacketTypes.SuperLightSyncPlayerPacket);
|
||||||
|
|
||||||
byte[] result = CoopSerializer.Serialize(this);
|
byte[] result = this.Serialize();
|
||||||
|
|
||||||
message.Write(result.Length);
|
message.Write(result.Length);
|
||||||
message.Write(result);
|
message.Write(result);
|
||||||
@ -554,7 +555,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
SuperLightSyncPlayerPacket data = CoopSerializer.Deserialize<SuperLightSyncPlayerPacket>(message.ReadBytes(len));
|
SuperLightSyncPlayerPacket data = message.ReadBytes(len).Deserialize<SuperLightSyncPlayerPacket>();
|
||||||
|
|
||||||
Extra = data.Extra;
|
Extra = data.Extra;
|
||||||
}
|
}
|
||||||
@ -583,7 +584,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
ChatMessagePacket data = CoopSerializer.Deserialize<ChatMessagePacket>(message.ReadBytes(len));
|
ChatMessagePacket data = message.ReadBytes(len).Deserialize<ChatMessagePacket>();
|
||||||
|
|
||||||
Username = data.Username;
|
Username = data.Username;
|
||||||
Message = data.Message;
|
Message = data.Message;
|
||||||
@ -614,7 +615,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
NativeCallPacket data = CoopSerializer.Deserialize<NativeCallPacket>(message.ReadBytes(len));
|
NativeCallPacket data = message.ReadBytes(len).Deserialize<NativeCallPacket>();
|
||||||
|
|
||||||
Hash = data.Hash;
|
Hash = data.Hash;
|
||||||
Args = data.Args;
|
Args = data.Args;
|
||||||
@ -717,7 +718,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
FullSyncNpcPacket data = CoopSerializer.Deserialize<FullSyncNpcPacket>(message.ReadBytes(len));
|
FullSyncNpcPacket data = message.ReadBytes(len).Deserialize<FullSyncNpcPacket>();
|
||||||
|
|
||||||
ID = data.ID;
|
ID = data.ID;
|
||||||
ModelHash = data.ModelHash;
|
ModelHash = data.ModelHash;
|
||||||
@ -801,7 +802,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
int len = message.ReadInt32();
|
int len = message.ReadInt32();
|
||||||
|
|
||||||
FullSyncNpcVehPacket data = CoopSerializer.Deserialize<FullSyncNpcVehPacket>(message.ReadBytes(len));
|
FullSyncNpcVehPacket data = message.ReadBytes(len).Deserialize<FullSyncNpcVehPacket>();
|
||||||
|
|
||||||
ID = data.ID;
|
ID = data.ID;
|
||||||
ModelHash = data.ModelHash;
|
ModelHash = data.ModelHash;
|
||||||
@ -824,16 +825,42 @@ namespace CoopServer
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
class CoopSerializer
|
public static class CoopSerializer
|
||||||
{
|
{
|
||||||
public static T Deserialize<T>(byte[] data) where T : new()
|
public static byte[] CSerialize(this object obj)
|
||||||
|
{
|
||||||
|
if (obj == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
BinaryFormatter bf = new BinaryFormatter();
|
||||||
|
using MemoryStream ms = new MemoryStream();
|
||||||
|
bf.Serialize(ms, obj);
|
||||||
|
return ms.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static T CDeserialize<T>(this byte[] bytes) where T : class
|
||||||
|
{
|
||||||
|
if (bytes == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
using MemoryStream memStream = new MemoryStream();
|
||||||
|
BinaryFormatter binForm = new BinaryFormatter();
|
||||||
|
memStream.Write(bytes, 0, bytes.Length);
|
||||||
|
memStream.Seek(0, SeekOrigin.Begin);
|
||||||
|
T obj = (T)binForm.Deserialize(memStream);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static T Deserialize<T>(this byte[] data) where T : new()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (MemoryStream stream = new MemoryStream(data))
|
using MemoryStream stream = new(data);
|
||||||
{
|
return Serializer.Deserialize<T>(stream);
|
||||||
return Serializer.Deserialize<T>(stream);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
@ -841,13 +868,11 @@ namespace CoopServer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static byte[] Serialize<T>(T packet)
|
internal static byte[] Serialize<T>(this T packet)
|
||||||
{
|
{
|
||||||
using (MemoryStream stream = new MemoryStream())
|
using MemoryStream stream = new();
|
||||||
{
|
Serializer.Serialize(stream, packet);
|
||||||
Serializer.Serialize(stream, packet);
|
return stream.ToArray();
|
||||||
return stream.ToArray();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user