Convert object to handle at client side
This commit is contained in:
@ -248,7 +248,20 @@ namespace RageCoop.Client
|
|||||||
break;
|
break;
|
||||||
case PacketType.CustomEvent:
|
case PacketType.CustomEvent:
|
||||||
{
|
{
|
||||||
Packets.CustomEvent packet = new Packets.CustomEvent();
|
Packets.CustomEvent packet = new Packets.CustomEvent((t, reader) =>
|
||||||
|
{
|
||||||
|
switch (t)
|
||||||
|
{
|
||||||
|
case 50:
|
||||||
|
return EntityPool.ServerProps[reader.ReadInt()].MainProp?.Handle;
|
||||||
|
case 51:
|
||||||
|
return EntityPool.GetPedByID(reader.ReadInt())?.MainPed?.Handle;
|
||||||
|
case 52:
|
||||||
|
return EntityPool.GetVehicleByID(reader.ReadInt())?.MainVehicle?.Handle;
|
||||||
|
default:
|
||||||
|
throw new ArgumentException("Cannot resolve server side argument: "+t);
|
||||||
|
}
|
||||||
|
});
|
||||||
packet.Unpack(data);
|
packet.Unpack(data);
|
||||||
Scripting.API.Events.InvokeCustomEventReceived(packet);
|
Scripting.API.Events.InvokeCustomEventReceived(packet);
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,11 @@ namespace RageCoop.Core
|
|||||||
|
|
||||||
internal class CustomEvent : Packet
|
internal class CustomEvent : Packet
|
||||||
{
|
{
|
||||||
|
public CustomEvent(Func<byte,BitReader,object> onResolve = null)
|
||||||
|
{
|
||||||
|
_resolve= onResolve;
|
||||||
|
}
|
||||||
|
private Func<byte, BitReader, object> _resolve { get; set; }
|
||||||
public int Hash { get; set; }
|
public int Hash { get; set; }
|
||||||
public List<object> Args { get; set; }
|
public List<object> Args { get; set; }
|
||||||
|
|
||||||
@ -75,8 +80,14 @@ namespace RageCoop.Core
|
|||||||
case 0x13:
|
case 0x13:
|
||||||
Args.Add((GTA.Model)reader.ReadInt()); break;
|
Args.Add((GTA.Model)reader.ReadInt()); break;
|
||||||
default:
|
default:
|
||||||
throw new InvalidOperationException($"Unexpected type:{type}\r\n{array.Dump()}");
|
if (_resolve==null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException($"Unexpected type:{type}\r\n{array.Dump()}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Args.Add(_resolve(type, reader)); break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,18 @@ namespace RageCoop.Server
|
|||||||
Server= server;
|
Server= server;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Pass the value as an argument in <see cref="Scripting.API.SendCustomEvent(int, List{object}, List{Client})"/> or <see cref="Client.SendCustomEvent(int, object[])"/> to convert this object to handle at client side.
|
||||||
|
/// </summary>
|
||||||
|
public Tuple<byte,byte[]> Handle
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return new(50, BitConverter.GetBytes(ID));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delete this prop
|
/// Delete this prop
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -65,6 +77,23 @@ namespace RageCoop.Server
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class ServerPed
|
public class ServerPed
|
||||||
{
|
{
|
||||||
|
internal ServerPed()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Pass the value as an argument in <see cref="Scripting.API.SendCustomEvent(int, List{object}, List{Client})"/> or <see cref="Client.SendCustomEvent(int, object[])"/> to convert this object to handle at client side.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Tuple<byte, byte[]> Handle
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return new(51, BitConverter.GetBytes(ID));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The <see cref="Client"/> that is responsible synchronizing for this ped.
|
/// The <see cref="Client"/> that is responsible synchronizing for this ped.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -106,6 +135,22 @@ namespace RageCoop.Server
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class ServerVehicle
|
public class ServerVehicle
|
||||||
{
|
{
|
||||||
|
internal ServerVehicle()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Pass the value as an argument in <see cref="Scripting.API.SendCustomEvent(int, List{object}, List{Client})"/> or <see cref="Client.SendCustomEvent(int, object[])"/> to convert this object to handle at client side.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Tuple<byte, byte[]> Handle
|
||||||
|
{
|
||||||
|
get{
|
||||||
|
return new(52, BitConverter.GetBytes(ID));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The <see cref="Client"/> that is responsible synchronizing for this vehicle.
|
/// The <see cref="Client"/> that is responsible synchronizing for this vehicle.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -234,7 +279,7 @@ namespace RageCoop.Server
|
|||||||
/// Get all static objects owned by server
|
/// Get all static objects owned by server
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public ServerProp[] GetAllObjects()
|
public ServerProp[] GetAllProps()
|
||||||
{
|
{
|
||||||
return ServerProps.Values.ToArray();
|
return ServerProps.Values.ToArray();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user