2022-10-23 19:02:39 +08:00
|
|
|
|
using System;
|
|
|
|
|
using GTA;
|
|
|
|
|
using Lidgren.Network;
|
2022-10-05 15:53:57 +08:00
|
|
|
|
using RageCoop.Core.Scripting;
|
2022-10-23 19:02:39 +08:00
|
|
|
|
|
2022-06-19 11:12:20 +08:00
|
|
|
|
namespace RageCoop.Core
|
|
|
|
|
{
|
2022-07-01 14:39:43 +08:00
|
|
|
|
internal partial class Packets
|
2022-06-19 11:12:20 +08:00
|
|
|
|
{
|
2022-07-01 14:39:43 +08:00
|
|
|
|
internal class CustomEvent : Packet
|
2022-06-19 11:12:20 +08:00
|
|
|
|
{
|
2022-10-05 15:53:57 +08:00
|
|
|
|
public static Func<byte, NetIncomingMessage, object> ResolveHandle = null;
|
|
|
|
|
public CustomEventFlags Flags;
|
2022-10-23 19:02:39 +08:00
|
|
|
|
|
2022-10-05 15:53:57 +08:00
|
|
|
|
public CustomEvent(CustomEventFlags flags = CustomEventFlags.None)
|
2022-07-02 17:53:35 +08:00
|
|
|
|
{
|
2022-10-05 15:53:57 +08:00
|
|
|
|
Flags = flags;
|
2022-07-02 17:53:35 +08:00
|
|
|
|
}
|
2022-10-23 19:02:39 +08:00
|
|
|
|
|
|
|
|
|
public override PacketType Type => PacketType.CustomEvent;
|
2022-06-19 11:12:20 +08:00
|
|
|
|
public int Hash { get; set; }
|
2022-07-05 10:52:22 +08:00
|
|
|
|
public object[] Args { get; set; }
|
2022-06-19 11:12:20 +08:00
|
|
|
|
|
2022-09-08 12:37:06 -07:00
|
|
|
|
protected override void Serialize(NetOutgoingMessage m)
|
2022-06-19 11:12:20 +08:00
|
|
|
|
{
|
2022-09-08 12:41:56 -07:00
|
|
|
|
Args = Args ?? new object[] { };
|
2022-10-05 15:53:57 +08:00
|
|
|
|
m.Write((byte)Flags);
|
2022-09-08 12:37:06 -07:00
|
|
|
|
m.Write(Hash);
|
|
|
|
|
m.Write(Args.Length);
|
2022-10-23 19:02:39 +08:00
|
|
|
|
foreach (var arg in Args) CoreUtils.GetBytesFromObject(arg, m);
|
2022-06-19 11:12:20 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-09-08 12:37:06 -07:00
|
|
|
|
public override void Deserialize(NetIncomingMessage m)
|
2022-06-19 11:12:20 +08:00
|
|
|
|
{
|
2022-10-05 15:53:57 +08:00
|
|
|
|
Flags = (CustomEventFlags)m.ReadByte();
|
2022-09-08 12:37:06 -07:00
|
|
|
|
Hash = m.ReadInt32();
|
2022-10-05 18:10:56 +08:00
|
|
|
|
Args = new object[m.ReadInt32()];
|
2022-10-23 19:02:39 +08:00
|
|
|
|
for (var i = 0; i < Args.Length; i++)
|
2022-06-19 11:12:20 +08:00
|
|
|
|
{
|
2022-10-23 19:02:39 +08:00
|
|
|
|
var type = m.ReadByte();
|
2022-06-23 09:46:38 +08:00
|
|
|
|
switch (type)
|
2022-06-19 11:12:20 +08:00
|
|
|
|
{
|
|
|
|
|
case 0x01:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = m.ReadByte();
|
|
|
|
|
break;
|
2022-06-19 11:12:20 +08:00
|
|
|
|
case 0x02:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = m.ReadInt32();
|
|
|
|
|
break;
|
2022-06-19 11:12:20 +08:00
|
|
|
|
case 0x03:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = m.ReadUInt16();
|
|
|
|
|
break;
|
2022-06-19 11:12:20 +08:00
|
|
|
|
case 0x04:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = m.ReadInt32();
|
|
|
|
|
break;
|
2022-06-19 11:12:20 +08:00
|
|
|
|
case 0x05:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = m.ReadUInt32();
|
|
|
|
|
break;
|
2022-06-19 11:12:20 +08:00
|
|
|
|
case 0x06:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = m.ReadInt64();
|
|
|
|
|
break;
|
2022-06-19 11:12:20 +08:00
|
|
|
|
case 0x07:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = m.ReadUInt64();
|
|
|
|
|
break;
|
2022-06-19 11:12:20 +08:00
|
|
|
|
case 0x08:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = m.ReadFloat();
|
|
|
|
|
break;
|
2022-06-19 11:12:20 +08:00
|
|
|
|
case 0x09:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = m.ReadBoolean();
|
|
|
|
|
break;
|
2022-06-19 11:12:20 +08:00
|
|
|
|
case 0x10:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = m.ReadString();
|
|
|
|
|
break;
|
2022-09-08 12:41:56 -07:00
|
|
|
|
case 0x11:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = m.ReadVector3();
|
|
|
|
|
break;
|
2022-07-02 17:14:56 +08:00
|
|
|
|
case 0x12:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = m.ReadQuaternion();
|
|
|
|
|
break;
|
2022-07-02 17:14:56 +08:00
|
|
|
|
case 0x13:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = (Model)m.ReadInt32();
|
|
|
|
|
break;
|
2022-07-03 15:28:28 +08:00
|
|
|
|
case 0x14:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = m.ReadVector2();
|
|
|
|
|
break;
|
2022-09-08 12:37:06 -07:00
|
|
|
|
case 0x15:
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Args[i] = m.ReadByteArray();
|
|
|
|
|
break;
|
2022-06-23 09:46:38 +08:00
|
|
|
|
default:
|
2022-11-05 18:35:39 +08:00
|
|
|
|
if (ResolveHandle == null) throw new InvalidOperationException($"Unexpected type: {type}");
|
2022-10-23 19:02:39 +08:00
|
|
|
|
|
|
|
|
|
Args[i] = ResolveHandle(type, m);
|
|
|
|
|
break;
|
2022-06-19 11:12:20 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-10-23 19:02:39 +08:00
|
|
|
|
}
|