Convert object to handle at client side
This commit is contained in:
@ -248,7 +248,20 @@ namespace RageCoop.Client
|
||||
break;
|
||||
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);
|
||||
Scripting.API.Events.InvokeCustomEventReceived(packet);
|
||||
}
|
||||
|
@ -9,6 +9,11 @@ namespace RageCoop.Core
|
||||
|
||||
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 List<object> Args { get; set; }
|
||||
|
||||
@ -75,8 +80,14 @@ namespace RageCoop.Core
|
||||
case 0x13:
|
||||
Args.Add((GTA.Model)reader.ReadInt()); break;
|
||||
default:
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/// <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>
|
||||
/// Delete this prop
|
||||
/// </summary>
|
||||
@ -65,6 +77,23 @@ namespace RageCoop.Server
|
||||
/// </summary>
|
||||
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>
|
||||
/// The <see cref="Client"/> that is responsible synchronizing for this ped.
|
||||
/// </summary>
|
||||
@ -106,6 +135,22 @@ namespace RageCoop.Server
|
||||
/// </summary>
|
||||
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>
|
||||
/// The <see cref="Client"/> that is responsible synchronizing for this vehicle.
|
||||
/// </summary>
|
||||
@ -234,7 +279,7 @@ namespace RageCoop.Server
|
||||
/// Get all static objects owned by server
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ServerProp[] GetAllObjects()
|
||||
public ServerProp[] GetAllProps()
|
||||
{
|
||||
return ServerProps.Values.ToArray();
|
||||
}
|
||||
|
Reference in New Issue
Block a user