better but not finished yet

This commit is contained in:
EntenKoeniq
2021-09-29 15:51:28 +02:00
parent 05f70a6d04
commit dfc6682e20
5 changed files with 140 additions and 147 deletions

View File

@ -1,6 +1,7 @@
using System;
using System.IO;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters.Binary;
using Lidgren.Network;
using ProtoBuf;
@ -215,7 +216,7 @@ namespace CoopClient
{
message.Write((byte)PacketTypes.ModPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -225,7 +226,7 @@ namespace CoopClient
{
int len = message.ReadInt32();
ModPacket data = CoopSerializer.Deserialize<ModPacket>(message.ReadBytes(len));
ModPacket data = message.ReadBytes(len).Deserialize<ModPacket>();
ID = data.ID;
Mod = data.Mod;
@ -257,7 +258,7 @@ namespace CoopClient
{
message.Write((byte)PacketTypes.HandshakePacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -267,7 +268,7 @@ namespace CoopClient
{
int len = message.ReadInt32();
HandshakePacket data = CoopSerializer.Deserialize<HandshakePacket>(message.ReadBytes(len));
HandshakePacket data = message.ReadBytes(len).Deserialize<HandshakePacket>();
ID = data.ID;
SocialClubName = data.SocialClubName;
@ -293,7 +294,7 @@ namespace CoopClient
{
message.Write((byte)PacketTypes.PlayerConnectPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -303,7 +304,7 @@ namespace CoopClient
{
int len = message.ReadInt32();
PlayerConnectPacket data = CoopSerializer.Deserialize<PlayerConnectPacket>(message.ReadBytes(len));
PlayerConnectPacket data = message.ReadBytes(len).Deserialize<PlayerConnectPacket>();
ID = data.ID;
SocialClubName = data.SocialClubName;
@ -321,7 +322,7 @@ namespace CoopClient
{
message.Write((byte)PacketTypes.PlayerDisconnectPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -331,7 +332,7 @@ namespace CoopClient
{
int len = message.ReadInt32();
PlayerDisconnectPacket data = CoopSerializer.Deserialize<PlayerDisconnectPacket>(message.ReadBytes(len));
PlayerDisconnectPacket data = message.ReadBytes(len).Deserialize<PlayerDisconnectPacket>();
ID = data.ID;
}
@ -387,7 +388,7 @@ namespace CoopClient
{
message.Write((byte)PacketTypes.FullSyncPlayerPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -397,7 +398,7 @@ namespace CoopClient
{
int len = message.ReadInt32();
FullSyncPlayerPacket data = CoopSerializer.Deserialize<FullSyncPlayerPacket>(message.ReadBytes(len));
FullSyncPlayerPacket data = message.ReadBytes(len).Deserialize<FullSyncPlayerPacket>();
Extra = data.Extra;
ModelHash = data.ModelHash;
@ -463,7 +464,7 @@ namespace CoopClient
{
message.Write((byte)PacketTypes.FullSyncPlayerVehPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -473,7 +474,7 @@ namespace CoopClient
{
int len = message.ReadInt32();
FullSyncPlayerVehPacket data = CoopSerializer.Deserialize<FullSyncPlayerVehPacket>(message.ReadBytes(len));
FullSyncPlayerVehPacket data = message.ReadBytes(len).Deserialize<FullSyncPlayerVehPacket>();
Extra = data.Extra;
ModelHash = data.ModelHash;
@ -521,7 +522,7 @@ namespace CoopClient
{
message.Write((byte)PacketTypes.LightSyncPlayerPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -531,7 +532,7 @@ namespace CoopClient
{
int len = message.ReadInt32();
LightSyncPlayerPacket data = CoopSerializer.Deserialize<LightSyncPlayerPacket>(message.ReadBytes(len));
LightSyncPlayerPacket data = message.ReadBytes(len).Deserialize<LightSyncPlayerPacket>();
Extra = data.Extra;
Rotation = data.Rotation;
@ -577,7 +578,7 @@ namespace CoopClient
{
message.Write((byte)PacketTypes.LightSyncPlayerVehPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -587,7 +588,7 @@ namespace CoopClient
{
int len = message.ReadInt32();
LightSyncPlayerVehPacket data = CoopSerializer.Deserialize<LightSyncPlayerVehPacket>(message.ReadBytes(len));
LightSyncPlayerVehPacket data = message.ReadBytes(len).Deserialize<LightSyncPlayerVehPacket>();
Extra = data.Extra;
VehModelHash = data.VehModelHash;
@ -611,7 +612,7 @@ namespace CoopClient
{
message.Write((byte)PacketTypes.SuperLightSyncPlayerPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -621,7 +622,7 @@ namespace CoopClient
{
int len = message.ReadInt32();
SuperLightSyncPlayerPacket data = CoopSerializer.Deserialize<SuperLightSyncPlayerPacket>(message.ReadBytes(len));
SuperLightSyncPlayerPacket data = message.ReadBytes(len).Deserialize<SuperLightSyncPlayerPacket>();
Extra = data.Extra;
}
@ -650,7 +651,7 @@ namespace CoopClient
{
int len = message.ReadInt32();
ChatMessagePacket data = CoopSerializer.Deserialize<ChatMessagePacket>(message.ReadBytes(len));
ChatMessagePacket data = message.ReadBytes(len).Deserialize<ChatMessagePacket>();
Username = data.Username;
Message = data.Message;
@ -681,7 +682,7 @@ namespace CoopClient
{
int len = message.ReadInt32();
NativeCallPacket data = CoopSerializer.Deserialize<NativeCallPacket>(message.ReadBytes(len));
NativeCallPacket data = message.ReadBytes(len).Deserialize<NativeCallPacket>();
Hash = data.Hash;
Args = data.Args;
@ -784,7 +785,7 @@ namespace CoopClient
{
int len = message.ReadInt32();
FullSyncNpcPacket data = CoopSerializer.Deserialize<FullSyncNpcPacket>(message.ReadBytes(len));
FullSyncNpcPacket data = message.ReadBytes(len).Deserialize<FullSyncNpcPacket>();
ID = data.ID;
ModelHash = data.ModelHash;
@ -868,7 +869,7 @@ namespace CoopClient
{
int len = message.ReadInt32();
FullSyncNpcVehPacket data = CoopSerializer.Deserialize<FullSyncNpcVehPacket>(message.ReadBytes(len));
FullSyncNpcVehPacket data = message.ReadBytes(len).Deserialize<FullSyncNpcVehPacket>();
ID = data.ID;
ModelHash = data.ModelHash;
@ -891,9 +892,41 @@ namespace CoopClient
}
#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
{
@ -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())
{

View File

@ -1,4 +1,5 @@
using CoopServer;
using System.Collections.Generic;
namespace FirstGameMode
{
@ -38,5 +39,14 @@ namespace FirstGameMode
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()));
}
}
}

View File

@ -1,6 +1,4 @@
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.ComponentModel;
using System.Timers;
@ -37,16 +35,18 @@ namespace FirstGameMode
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;
// 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);
return;
}
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)
@ -81,39 +81,4 @@ namespace FirstGameMode
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;
}
}
}
}

View File

@ -1,6 +1,4 @@
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using GTA;
@ -51,8 +49,8 @@ namespace FirstScript
return;
}
CoopClient.Interface.SendDataToAll("FirstScript", 0, new TestPacketClass() { A = 5, B = 15 }.SerializeToByteArray());
CoopClient.Interface.SendDataToAll("FirstScript", 1, new SetPlayerTimePacket() { Hours = 0, Minutes = 0, Seconds = 0 }.SerializeToByteArray());
CoopClient.Interface.SendDataToAll("FirstScript", 0, CoopClient.CoopSerializer.CSerialize(new TestPacketClass() { A = 5, B = 15 }));
//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)
@ -65,52 +63,14 @@ namespace FirstScript
switch (customID)
{
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}]");
break;
case 1:
GTA.UI.Notification.Show($"ModPacket(0)({from}): Nice!");
break;
default:
GTA.UI.Notification.Show($"ModPacket({from}): ~r~Unknown customID!");
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;
}
}
}
}

View File

@ -1,6 +1,7 @@
using System;
using System.IO;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters.Binary;
using Lidgren.Network;
using ProtoBuf;
@ -148,7 +149,7 @@ namespace CoopServer
{
message.Write((byte)PacketTypes.ModPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -158,7 +159,7 @@ namespace CoopServer
{
int len = message.ReadInt32();
ModPacket data = CoopSerializer.Deserialize<ModPacket>(message.ReadBytes(len));
ModPacket data = message.ReadBytes(len).Deserialize<ModPacket>();
ID = data.ID;
Mod = data.Mod;
@ -190,7 +191,7 @@ namespace CoopServer
{
message.Write((byte)PacketTypes.HandshakePacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -200,7 +201,7 @@ namespace CoopServer
{
int len = message.ReadInt32();
HandshakePacket data = CoopSerializer.Deserialize<HandshakePacket>(message.ReadBytes(len));
HandshakePacket data = message.ReadBytes(len).Deserialize<HandshakePacket>();
ID = data.ID;
SocialClubName = data.SocialClubName;
@ -226,7 +227,7 @@ namespace CoopServer
{
message.Write((byte)PacketTypes.PlayerConnectPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -236,7 +237,7 @@ namespace CoopServer
{
int len = message.ReadInt32();
PlayerConnectPacket data = CoopSerializer.Deserialize<PlayerConnectPacket>(message.ReadBytes(len));
PlayerConnectPacket data = message.ReadBytes(len).Deserialize<PlayerConnectPacket>();
ID = data.ID;
SocialClubName = data.SocialClubName;
@ -254,7 +255,7 @@ namespace CoopServer
{
message.Write((byte)PacketTypes.PlayerDisconnectPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -264,7 +265,7 @@ namespace CoopServer
{
int len = message.ReadInt32();
PlayerDisconnectPacket data = CoopSerializer.Deserialize<PlayerDisconnectPacket>(message.ReadBytes(len));
PlayerDisconnectPacket data = message.ReadBytes(len).Deserialize<PlayerDisconnectPacket>();
ID = data.ID;
}
@ -320,7 +321,7 @@ namespace CoopServer
{
message.Write((byte)PacketTypes.FullSyncPlayerPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -330,7 +331,7 @@ namespace CoopServer
{
int len = message.ReadInt32();
FullSyncPlayerPacket data = CoopSerializer.Deserialize<FullSyncPlayerPacket>(message.ReadBytes(len));
FullSyncPlayerPacket data = message.ReadBytes(len).Deserialize<FullSyncPlayerPacket>();
Extra = data.Extra;
ModelHash = data.ModelHash;
@ -396,7 +397,7 @@ namespace CoopServer
{
message.Write((byte)PacketTypes.FullSyncPlayerVehPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -406,7 +407,7 @@ namespace CoopServer
{
int len = message.ReadInt32();
FullSyncPlayerVehPacket data = CoopSerializer.Deserialize<FullSyncPlayerVehPacket>(message.ReadBytes(len));
FullSyncPlayerVehPacket data = message.ReadBytes(len).Deserialize<FullSyncPlayerVehPacket>();
Extra = data.Extra;
ModelHash = data.ModelHash;
@ -454,7 +455,7 @@ namespace CoopServer
{
message.Write((byte)PacketTypes.LightSyncPlayerPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -464,7 +465,7 @@ namespace CoopServer
{
int len = message.ReadInt32();
LightSyncPlayerPacket data = CoopSerializer.Deserialize<LightSyncPlayerPacket>(message.ReadBytes(len));
LightSyncPlayerPacket data = message.ReadBytes(len).Deserialize<LightSyncPlayerPacket>();
Extra = data.Extra;
Rotation = data.Rotation;
@ -510,7 +511,7 @@ namespace CoopServer
{
message.Write((byte)PacketTypes.LightSyncPlayerVehPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -520,7 +521,7 @@ namespace CoopServer
{
int len = message.ReadInt32();
LightSyncPlayerVehPacket data = CoopSerializer.Deserialize<LightSyncPlayerVehPacket>(message.ReadBytes(len));
LightSyncPlayerVehPacket data = message.ReadBytes(len).Deserialize<LightSyncPlayerVehPacket>();
Extra = data.Extra;
VehModelHash = data.VehModelHash;
@ -544,7 +545,7 @@ namespace CoopServer
{
message.Write((byte)PacketTypes.SuperLightSyncPlayerPacket);
byte[] result = CoopSerializer.Serialize(this);
byte[] result = this.Serialize();
message.Write(result.Length);
message.Write(result);
@ -554,7 +555,7 @@ namespace CoopServer
{
int len = message.ReadInt32();
SuperLightSyncPlayerPacket data = CoopSerializer.Deserialize<SuperLightSyncPlayerPacket>(message.ReadBytes(len));
SuperLightSyncPlayerPacket data = message.ReadBytes(len).Deserialize<SuperLightSyncPlayerPacket>();
Extra = data.Extra;
}
@ -583,7 +584,7 @@ namespace CoopServer
{
int len = message.ReadInt32();
ChatMessagePacket data = CoopSerializer.Deserialize<ChatMessagePacket>(message.ReadBytes(len));
ChatMessagePacket data = message.ReadBytes(len).Deserialize<ChatMessagePacket>();
Username = data.Username;
Message = data.Message;
@ -614,7 +615,7 @@ namespace CoopServer
{
int len = message.ReadInt32();
NativeCallPacket data = CoopSerializer.Deserialize<NativeCallPacket>(message.ReadBytes(len));
NativeCallPacket data = message.ReadBytes(len).Deserialize<NativeCallPacket>();
Hash = data.Hash;
Args = data.Args;
@ -717,7 +718,7 @@ namespace CoopServer
{
int len = message.ReadInt32();
FullSyncNpcPacket data = CoopSerializer.Deserialize<FullSyncNpcPacket>(message.ReadBytes(len));
FullSyncNpcPacket data = message.ReadBytes(len).Deserialize<FullSyncNpcPacket>();
ID = data.ID;
ModelHash = data.ModelHash;
@ -801,7 +802,7 @@ namespace CoopServer
{
int len = message.ReadInt32();
FullSyncNpcVehPacket data = CoopSerializer.Deserialize<FullSyncNpcVehPacket>(message.ReadBytes(len));
FullSyncNpcVehPacket data = message.ReadBytes(len).Deserialize<FullSyncNpcVehPacket>();
ID = data.ID;
ModelHash = data.ModelHash;
@ -824,16 +825,42 @@ namespace CoopServer
}
#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
{
using (MemoryStream stream = new MemoryStream(data))
{
return Serializer.Deserialize<T>(stream);
}
using MemoryStream stream = new(data);
return Serializer.Deserialize<T>(stream);
}
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())
{
Serializer.Serialize(stream, packet);
return stream.ToArray();
}
using MemoryStream stream = new();
Serializer.Serialize(stream, packet);
return stream.ToArray();
}
}
}